共同分配Python变量与整数和集合不同.为什么



假设我共同分配两个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

名称xy0值引用相同的INT对象。

int对象是不可变的。由于您无法改变它们,但实际上没有如果有几个。

当您再次分配

y
y = 2

y现在是指带有值 2的其他int对象。 x仍指旧的0值对象。

如果您考虑类型的类型,例如集合,

b = set()
a = b

ab引用相同的空集对象。如果您使用就地分配更改集合对象,或使用将其定为就位对象方法,则该对象保持相同(但其值内容更改(。因此,您可以通过ab看到更改的对象。

但是,如果您制作

,将苹果与苹果进行比较并按照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情况下,您无法更改对象值。

最新更新