在python中,我声明了两个具有相同值的变量。奇怪的是,他们指向同一个对象。我需要了解如何分配这些对象及其相应的值。
#!/usr/bin/python
a = 100
b = 100
print id(a)
print id(b)
--------------------
Output :
157375428
157375428
-------------------
我假设,a和b是具有相同值的两个不同变量。那么为什么同一个对象指向它们呢?
答案 0 :(得分:3)
技术上a
和b
是两个 不同的 变量。
在Python中,变量只是一个名称。值在其他位置,变量指的是值。
对于不可变类型,实际上可以计算新值的操作 返回对具有相同类型的任何现有对象的引用 值,而对于可变对象,这是不允许的。例如,在
a = 1
之后;b = 1
,a
和b
可能会也可能不会引用相同的对象 值一,取决于实施。
答案 1 :(得分:3)
通过调用id(a)
,您实际获得与调用id(100)
时相同的结果,a
和b
共享同一个100
实例。我知道这很混乱,几乎所有其他编程语言的行为都不同。也许您不应该将a
和b
视为变量,而是将“命名参考”视为对象。
答案 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