Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.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 如何判断具有相同值的两个变量何时具有不同的标识?_Python_Memory - Fatal编程技术网

Python 如何判断具有相同值的两个变量何时具有不同的标识?

Python 如何判断具有相同值的两个变量何时具有不同的标识?,python,memory,Python,Memory,如您所见,第一次打印的ID不同,但第二次打印的ID相同。为什么?是什么决定了两个变量的ID在被赋予相同的值后是否相同?小整数被插入 具有小值的短整数(通常介于-1和99之间 (包括在内)被“拘留”——每当结果有这样的值, 返回具有相同值的现有短int。这是 未完成对于具有相同值的长整数 此外 但可能存在使用“is”比较短整数和 因为这次实习,我碰巧工作了。这样的代码可能会失败 如果与长整数一起使用。) 但是,这不是应该依赖的行为,因为它是特定于实现的。它对更大的整数不起作用,而且实习也不能保证,

如您所见,第一次打印的ID不同,但第二次打印的ID相同。为什么?是什么决定了两个变量的ID在被赋予相同的值后是否相同?

小整数被插入

具有小值的短整数(通常介于-1和99之间 (包括在内)被“拘留”——每当结果有这样的值, 返回具有相同值的现有短int。这是 未完成对于具有相同值的长整数

此外

但可能存在使用“is”比较短整数和 因为这次实习,我碰巧工作了。这样的代码可能会失败 如果与长整数一起使用。)

但是,这不是应该依赖的行为,因为它是特定于实现的。它对更大的整数不起作用,而且实习也不能保证,所以你不应该在这里使用
is
。 除了整数之外,字符串也可以被插入


()

正如@jamylak指出的,您的第一个测试比较两个列表的
id
,而不是它们包含的整数。如果您实际比较列表中的整数——例如
print id(x[0])、id(y[0])
——您可能会得到相同的
id

>>> x = [1,2,3]
>>> y = [1,2,3]
>>> print id(x),id(y)
43259384 43258744

>>> x = 1
>>> y = 1
>>> print id(x),id(y)
5417464 5417464

@IgnacioVazquez Abrams此问题涉及列表,列表不应具有相同的
id
。这个问题的全部内容并不是用链接编号来解释的,链接编号是不变的。正因为如此,Python实现可能会利用Interning(如相关文章中的答案所述)——Java对有限的整数集做同样的事情。其他语言实现(即ELisp和MRI Ruby)使用“立即值”作为另一种优化,在比较身份时具有相同的结果。@jamylak列表没有相同的id。@user2246674将其作为答案而不是注释发布;)这是真的,因为@Ignacio的链接中显示了实习,但我更强调的是列表是可变的。明白了。谢谢你的澄清。在CPython上,范围是-5到256。
>>> x = [1, 2, 3]
>>> y = [1, 2, 3]
>>> print id(x[0]), id(y[0])
4298179016 4298179016