
我得到以下内容:
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()是相同的,即使它们的值不同?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)