变量A分配给变量B.当A变化时,A不应该变化吗?

时间:2017-07-01 13:25:32

标签: python

>>> a = 2
>>> b = a
>>> b
2
>>> a = 20
>>> b
2

b的最后一个实例也不会返回20,因为b被分配给a,它改变了吗?

2 个答案:

答案 0 :(得分:3)

在Python中,一切都是一个对象,当你分配一些东西时,你实际上只是分配一个对象的引用。

因此,考虑一个变量只是某个存在于某处的对象的标签 - 由于这个原因,Python实际上会调用变量“names”。

当您执行a = 2时,您将为int对象提供值为a的值2。现在执行b = a时,您为a引用另一个名称b的对象提供了帮助。因此,两个变量都将引用相同的对象。到目前为止一切都很好。

现在执行a = 20时,您可以更改名称a所指的内容。您正在使用该名称来引用另一个保存值为20的int对象。这不会影响保持值为2的其他对象;仍然具有名称b。所以分配一些东西只会重新标记对象。你永远不会用那种方式修改任何对象。

这与 mutate 对象不同。最常见的例子是列表:

a = ['hello']
b = a

就像之前一样,ab相同 list对象的名称。如果您现在通过调用b来改变b.append('world'),那么您正在改变b引用的对象。但a仍然引用相同的 list对象,因此在查看a时,您也会看到这些更改:

>>> a = ['hello']
>>> b = a
>>> b.append('world')
>>> a
['hello', 'world']

答案 1 :(得分:0)

在示例中,b被初始化为a中存储的数量,即2.然后,a被重新分配值20.但是,这不是更改b,因为int对象是不可变的。换句话说,b的值为a,但一旦a发生更改,其效果就会存储在b

a = 2

b = a #here, storing the contents of a in b

#b now stores 2

a = 20 #here, only changes the value that is stored in a.

#b is still 2

编辑:

以下是将b分配给:

的示例
a = 2

b = 3

a = b #now, a stores the value that b contains

#a is now 3

#b is still 3