Python中的变量赋值和操作
我对下面Python代码的结果差异感到非常困惑。为什么在第一种情况下“a”不随“b”的变化而变化,而在第二种情况下则会变化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]] 有人建议这是一个重
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都指向同一个列表。