Python id的相同值(浮动)
据我所知,Python中的一切都是对象,id应该是对的吧?为每个对象返回不同的数字 在我的例子中,id1返回4298178968,id2返回4298178944,但所有浮点类型的值都相同,id1.1返回4298189032,id2.2也返回4298189032及更多Python id的相同值(浮动),python,Python,据我所知,Python中的一切都是对象,id应该是对的吧?为每个对象返回不同的数字 在我的例子中,id1返回4298178968,id2返回4298178944,但所有浮点类型的值都相同,id1.1返回4298189032,id2.2也返回4298189032及更多 为什么所有浮点值的id都相同?Python可以重用内存位置 运行时: id(1.1) 创建一个浮点值,请求其id,然后Python再次删除该值,因为没有任何内容引用它。然后创建另一个浮点值时,Python可以重用相同的内存位置,因
为什么所有浮点值的id都相同?Python可以重用内存位置 运行时:
id(1.1)
创建一个浮点值,请求其id,然后Python再次删除该值,因为没有任何内容引用它。然后创建另一个浮点值时,Python可以重用相同的内存位置,因此id2.2可能会为id返回相同的值:
改为这样做:
float_one, float_two = 1.1, 2.2
print id(float_one), id(float_two)
现在,浮点值引用了这两个变量,不会被销毁,它们现在有不同的内存位置,因此id值也不同
对于从-5到256的小整数,您看到不同id值的原因是:;Python只创建一个1整数对象,并反复使用它。因此,这些整数都有一个唯一的内存地址regardles,因为Python解释器本身已经引用了它们,并且在解释器退出之前不会删除它们
>>> id(1.1)
154154684
由于1.1未分配给任何变量,因此将对其进行垃圾收集,下次将对浮点使用相同的id时:
>>> id(2.2)
154154684
将1.1保存在变量中:
>>> f = 1.1
>>> id(f)
154154684 #this id is locked for now
现在使用新地址:
>>> id(1.1)
154154700
>>> id(2.2)
154154700
这也适用于整数:
从-5到256的整数实际上缓存在python中,因此它们总是返回不同的ID
对于字符串:
与整数一样,一些字符串也缓存在python中。因此,这些字符串的id将不同于读取的详细信息::
非字母数字字符串使用相同的id:
啊,是的,我在ipython,那里的数字存储在in-Out!:请注意,小整数的这种内插可能是CPython实现的一个特性,而不是语言的一个保证属性。在本例中,它类似于在一些Objective-C实现中内存中的小NSInteger值0到12,人们对奇怪的保留计数感到好奇。而且,像那样,依赖这种实习可能不是一个好主意。@paxdiablo:id的全部含义是一个CPython实现细节。
>>> id(1.1)
154154700
>>> id(2.2)
154154700
>>> id(260)
154302180
>>> id(280)
154302180
>>> id('foo')
162861592
>>> id('foo')
162861568
>>> id('foo!&9((&')
162840000
>>> id('foo!&9((&')
162840000