假设我共同分配两个python变量为零:
>>> x = y = 0
现在,当我分配一个值时,它独立于另一个值而变化:
>>> y = 2
>>> x
0
>>> y
2
现在假设我将两个python变量共同分配给一个空集:
>>> a = b = set([])
现在,当我添加到一组时,它会更改另一个值。为什么?
>>> b.add(2)
>>> a
set([2])
>>> b
set([2])
作为对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
>>>
因此,在两种情况下,行为实际上都是相同的。但是在int情况下,您无法更改对象值。