假设我将两个python变量共同分配为零:
>>> x = y = 0
当我现在分配给一个值时,它会独立于另一个值而变化:
>>> y = 2
>>> x
0
>>> y
2
现在假设我将两个python变量共同分配给一个空集:
>>> a = b = set([])
当我现在添加到一个集合时,它会更改另一个集合的值。为什么?
>>> b.add(2)
>>> a
set([2])
>>> b
set([2])
答案 0 :(得分:1)
由于对OP答案的回应只是隐含的线索,我将它们变为明确:
y = 0
x = y
名称x
和y
引用具有0
值的相同int对象。
int
个对象是不可变的。你无法改变它们,但它实际上并没有改变它们
重要的是你指的是零值的对象,如果有几个。
再次使用
分配y
时
y = 2
y
现在引用值为2
的不同int对象。
x
仍然引用旧的0值对象。
如果考虑像集合这样的可变类型,
b = set()
a = b
a
和b
引用相同的空集对象。
如果使用就地分配更改设置对象,或使用在原位更改它的对象方法,则对象保持不变(但其值内容已更改)。
因此,您可以通过a
或b
来查看更改的对象。
但是,要比较苹果和苹果,并按照int
样本进行
b = set() # a new empty set
b
成为一个新的不同的空集对象,而a
仍然引用原始对象。
>>> a = set()
>>> b = a
>>> id(a) == id(b)
True
>>> b = set()
>>> id(a) == id(b)
False
>>>
因此,在这两种情况下,行为实际上是相同的。但在国际情况下,您无法对对象值进行更改。