Python 中的变量赋值和操作
Variable assignment and manipulation in Python
我对下面 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
之前持有什么价值,你都可以这样做。
当您执行 b.append(...)
时,您 修改 作为 b
的现有值的对象。如果该对象也是其他名称的值(在本例中为 a
),那么这些名称也会 "see" 发生变化。请注意,与赋值不同,这些类型的操作取决于您拥有的值类型。你可以做 b.append(...)
因为 b
是一个列表。例如,如果 b
是一个整数,则您不能执行 b.append
,但您仍然可以执行 b = [1, 2, 3]
.
在第一个示例中,您正在重新分配变量 b
,现在它指向另一个列表。
a = b = [] # a -> [] <- b
b = [1, 2, 3] # a -> [], b -> [1, 2, 3]
在第二个示例中,a
和 b
变量都指向同一个列表,并且您在列表中插入值:
a = b = [] # a -> [] <- b
b.append([1, 2, 3]) # a -> [[1, 2, 3]] <- b
为了详细说明其他答案,这直接来自 Python docs:
list.append(x)
Add an item to the end of the list; equivalent to a[len(a):] = [x].
正在查看:
a[len(a):] = [x]
很容易看出,使用 append 是在修改原始列表(python 示例代码中的 a
,您的示例中的 b
)。
正如其他人指出的那样,使用赋值语句是为 b
分配一个新值,而不是通过 append
.
修改它
我对下面 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
之前持有什么价值,你都可以这样做。
当您执行 b.append(...)
时,您 修改 作为 b
的现有值的对象。如果该对象也是其他名称的值(在本例中为 a
),那么这些名称也会 "see" 发生变化。请注意,与赋值不同,这些类型的操作取决于您拥有的值类型。你可以做 b.append(...)
因为 b
是一个列表。例如,如果 b
是一个整数,则您不能执行 b.append
,但您仍然可以执行 b = [1, 2, 3]
.
在第一个示例中,您正在重新分配变量 b
,现在它指向另一个列表。
a = b = [] # a -> [] <- b
b = [1, 2, 3] # a -> [], b -> [1, 2, 3]
在第二个示例中,a
和 b
变量都指向同一个列表,并且您在列表中插入值:
a = b = [] # a -> [] <- b
b.append([1, 2, 3]) # a -> [[1, 2, 3]] <- b
为了详细说明其他答案,这直接来自 Python docs:
list.append(x)
Add an item to the end of the list; equivalent to a[len(a):] = [x].
正在查看:
a[len(a):] = [x]
很容易看出,使用 append 是在修改原始列表(python 示例代码中的 a
,您的示例中的 b
)。
正如其他人指出的那样,使用赋值语句是为 b
分配一个新值,而不是通过 append
.