Python中的变量赋值和操作

Python中的变量赋值和操作,python,variable-assignment,Python,Variable Assignment,我对下面Python代码的结果差异感到非常困惑。为什么在第一种情况下“a”不随“b”的变化而变化,而在第二种情况下则会变化 a=b=[] b = [1,2,3] print b,a ########## compare with below ################################ a=b=[] b.append([1,2,3]) print b,a 第一部分的结果是: [1,2,3] [ ] 第二部分的结果是: [[1,2,3]][[1,2,3]] 有人建议这是一个重

我对下面Python代码的结果差异感到非常困惑。为什么在第一种情况下“a”不随“b”的变化而变化,而在第二种情况下则会变化

a=b=[]
b = [1,2,3]
print b,a
########## compare with below ################################
a=b=[]
b.append([1,2,3])
print b,a
第一部分的结果是: [1,2,3] [ ] 第二部分的结果是: [[1,2,3]][[1,2,3]]


有人建议这是一个重复的问题,但我认为我在这里用两种不同的方式更改列表“b”,我想这可以显示这两种变量操作方法的不同。

因为
=
append
不同

当您执行
b=[1,2,3]
时,您将为
b
分配一个新值。这不以任何方式涉及
b
的旧值;您可以执行此操作,无论之前持有的值是多少


当您执行
b.append(…)
时,您将修改作为
b
的现有值的对象。如果该对象也是其他名称的值(在本例中为
a
),则这些名称也将“看到”更改。请注意,与赋值不同,这些类型的操作取决于您拥有的值的类型。您可以执行
b.append(…)
,因为
b
是一个列表。如果
b
是一个整数,你就不能执行
b.append
,但你仍然可以执行
b=[1,2,3]
,,因为
=
append
不同

当您执行
b=[1,2,3]
时,您将为
b
分配一个新值。这不以任何方式涉及
b
的旧值;您可以执行此操作,无论之前持有的值是多少


当您执行
b.append(…)
时,您将修改作为
b
的现有值的对象。如果该对象也是其他名称的值(在本例中为
a
),则这些名称也将“看到”更改。请注意,与赋值不同,这些类型的操作取决于您拥有的值的类型。您可以执行
b.append(…)
,因为
b
是一个列表。例如,如果
b
是一个整数,则不能执行
b.append
,但仍然可以执行
b=[1,2,3]
,在第一个示例中,您正在重新分配变量
b
,现在它指向另一个列表

a = b = [] # a -> [] <- b
b = [1, 2, 3] # a -> [], b -> [1, 2, 3]

在第一个示例中,您正在重新分配变量
b
,现在它指向另一个列表

a = b = [] # a -> [] <- b
b = [1, 2, 3] # a -> [], b -> [1, 2, 3]

要详细说明其他答案,请直接从以下内容:

看看:

a[len(a):] = [x]
很容易看出,使用append正在修改原始列表(在python示例代码中是
a
,在您的示例代码中是
b


正如其他人所指出的,使用赋值语句是将新值赋值给
b
,而不是通过
append
修改它来详细说明其他答案,这直接来自:

看看:

a[len(a):] = [x]
很容易看出,使用append正在修改原始列表(在python示例代码中是
a
,在您的示例代码中是
b


正如其他人所指出的,使用赋值语句是将一个新值赋给
b
,而不是通过
append

对其进行修改。在第一部分中,您将b指向一个新的、不同的列表。在第二部分中,a和b都指向同一个列表。在第一部分中,你将b指向一个新的、不同的列表。在第二行中,a和b都指向同一个列表。