python-numpy.float64对象的id()是相同的,即使它们的值不同?

python-numpy.float64对象的id()是相同的,即使它们的值不同?,第1张

概述参见英文答案 > Why is the id of a Python class not unique when called quickly?                                    6个 我得到以下内容: import numpyprint id(numpy.float64(100)) == id(numpy.float64(10))print numpy. 参见英文答案 > Why is the id of a Python class not unique when called quickly?                                    6个
我得到以下内容:

import numpyprint ID(numpy.float64(100)) ==  ID(numpy.float64(10))print numpy.float64(100) == numpy.float64(10)

得到:

TrueFalse

请注意,如果我创建两个float64对象,然后比较它们,它似乎按预期工作:

a = numpy.float64(10)b = numpy.float64(100)print a==b,ID(a)==ID(b)

得到:

FalseFalse

基于https://docs.python.org/2/reference/datamodel.html,如果它们的值不同,两个对象的ID是否总是不同?如果值不同,我怎样才能获得匹配的ID?

这是numpy中的某种错误吗?

解决方法 这看起来像是内存重用的怪癖,而不是NumPy错误.

这条线

ID(numpy.float64(100)) == ID(numpy.float64(10))

首先创建一个浮动numpy.float64(100)然后调用它上面的ID函数.然后Python的垃圾收集器立即释放这个内存,因为没有更多的引用它.内存槽可以由任何创建的新对象自由重用.

当创建numpy.float64(10)时,它占用相同的内存位置,因此ID返回的内存地址相等.

当您查看字节码时,这一系列事件可能更清晰:

>>> dis.dis('ID(numpy.float64(100)) ==  ID(numpy.float64(10))')  0 LOAD_name                0 (ID)  3 LOAD_name                1 (numpy)  6 LOAD_ATTR                2 (float64)  9 LOAD_CONST               0 (100) 12 CALL_FUNCTION            1 (1 positional,0 keyword pair) # call numpy.float64(100) 15 CALL_FUNCTION            1 (1 positional,0 keyword pair) # get ID of object # gc runs and frees memory occupIEd by numpy.float64(100) 18 LOAD_name                0 (ID)                    21 LOAD_name                1 (numpy) 24 LOAD_ATTR                2 (float64) 27 LOAD_CONST               1 (10) 30 CALL_FUNCTION            1 (1 positional,0 keyword pair) # call numpy.float64(10) 33 CALL_FUNCTION            1 (1 positional,0 keyword pair) # get ID of object 36 COMPARE_OP               2 (==) # compare the two IDs  39 RETURN_VALUE
总结

以上是内存溢出为你收集整理的python-numpy.float64对象的id()是相同的,即使它们的值不同?全部内容,希望文章能够帮你解决python-numpy.float64对象的id()是相同的,即使它们的值不同?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1194241.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-03
下一篇2022-06-03

发表评论

登录后才能评论

评论列表(0条)

    保存