>>> a = 2
>>> b = a
>>> b
2
>>> a = 20
>>> b
2
b的最后一个实例也不会返回20,因为b被分配给a,它改变了吗?
答案 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
就像之前一样,a
和b
是相同 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