Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python id的相同值(浮动)_Python - Fatal编程技术网

Python id的相同值(浮动)

Python id的相同值(浮动),python,Python,据我所知,Python中的一切都是对象,id应该是对的吧?为每个对象返回不同的数字 在我的例子中,id1返回4298178968,id2返回4298178944,但所有浮点类型的值都相同,id1.1返回4298189032,id2.2也返回4298189032及更多 为什么所有浮点值的id都相同?Python可以重用内存位置 运行时: id(1.1) 创建一个浮点值,请求其id,然后Python再次删除该值,因为没有任何内容引用它。然后创建另一个浮点值时,Python可以重用相同的内存位置,因

据我所知,Python中的一切都是对象,id应该是对的吧?为每个对象返回不同的数字

在我的例子中,id1返回4298178968,id2返回4298178944,但所有浮点类型的值都相同,id1.1返回4298189032,id2.2也返回4298189032及更多


为什么所有浮点值的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