具有相同值的不同Python变量指向同一对象

时间:2015-10-08 11:47:02

标签: python

在python中,我声明了两个具有相同值的变量。奇怪的是,他们指向同一个对象。我需要了解如何分配这些对象及其相应的值。

#!/usr/bin/python

a = 100
b = 100

print id(a)
print id(b)
--------------------
Output :

157375428
157375428
-------------------

我假设,a和b是具有相同值的两个不同变量。那么为什么同一个对象指向它们呢?

3 个答案:

答案 0 :(得分:3)

技术上ab是两个 不同的 变量。

在Python中,变量只是一个名称。值在其他位置,变量指的是值。

来自Python documentation

  

对于不可变类型,实际上可以计算新值的操作   返回对具有相同类型的任何现有对象的引用   值,而对于可变对象,这是不允许的。例如,在a = 1之后; b = 1ab可能会也可能不会引用相同的对象   值一,取决于实施。

答案 1 :(得分:3)

通过调用id(a),您实际获得与调用id(100)时相同的结果,ab共享同一个100实例。我知道这很混乱,几乎所有其他编程语言的行为都不同。也许您不应该将ab视为变量,而是将“命名参考”视为对象。

答案 2 :(得分:0)

Python预先分配了许多整数(参见http://blog.lerner.co.il/why-you-should-almost-never-use-is-in-python/)。例如,在我的电脑上我有:

>>> x = 100
>>> y = 100
>>> x is y
True

可是:

>>> x = 10**1000
>>> y = 10**1000
>>> x is y
False

事实上,我们可以看到只预先分配了前256个正整数:

>>> x = 0
>>> y = 0
>>> while True:
...     if not x is y:
...         print x
...         break
...     x += 1
...     y += 1
... 
257