Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.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/4/maven/6.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()应该(对吗?)为每个对象返回不同的数字 在我的例子中,id(1)返回4298178968,id(2)返回4298178944,但我得到的所有浮点类型的值都相同,id(1.1)返回4298189032,id(2.2)也返回4298189032等等 为什么所有浮点值都得到相同的id?Python可以重用内存位置 运行时: id(1.1) 创建一个浮点值,请求其id(),然后Python再次删除该值,因为没有任何内容引用它。然后,当您创建另一个浮点值时

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

在我的例子中,
id(1)
返回
4298178968
id(2)
返回
4298178944
,但我得到的所有浮点类型的值都相同,
id(1.1)
返回
4298189032
id(2.2)
也返回
4298189032
等等


为什么所有浮点值都得到相同的id

Python可以重用内存位置

运行时:

id(1.1)
创建一个浮点值,请求其
id()
,然后Python再次删除该值,因为没有任何内容引用它。然后,当您创建另一个浮点值时,Python可以重用相同的内存位置,因此
id(2.2)
可能会为
id()
返回相同的值:

改为这样做:

float_one, float_two = 1.1, 2.2
print id(float_one), id(float_two)
现在,浮点值引用了它们(两个变量),并且不会被销毁,它们现在有不同的内存位置,因此
id()

对于小整数(从-5到256),您看到不同的
id()
值的原因是;Python只创建一个
1
integer对象,并反复使用它。因此,这些整数都有一个唯一的内存地址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
这也适用于整数:

>>> id(260)
154302180
>>> id(280)
154302180
-5
256
的整数实际上是在python中缓存的,因此它们总是返回不同的ID。()

对于字符串

与整数一样,一些字符串也缓存在python中。因此,这类字符串的
id
将有所不同(详细信息如下所示:):

非字母数字字符串(使用相同的
id
):


啊,是的,我在ipython,那里的数字存储在in-Out!:)请注意,小整数的这种内插可能是CPython实现的一个特性,而不是语言的一个保证属性。在本例中,它类似于一些Objective-C实现中的小NSInteger值(内存中的0到12),人们对奇怪的保留计数感到好奇。而且,像这样,依赖这种实习可能不是一个好主意。@paxdiablo:id()的全部含义是一个CPython实现细节。
>>> id(260)
154302180
>>> id(280)
154302180
>>> id('foo')
162861592
>>> id('foo')
162861568
>>> id('foo!&9((&')
162840000
>>> id('foo!&9((&')
162840000