假设我有三组变量 a1、a2、a3、b1、b2、b3、c1、c2、c3,我想使用循环而不是单独赋值来更改每组中的第一个变量。
将每个组放入列表中是行不通的:
a1, a2, a3 = 1, 2, 3
b1, b2, b3 = 4, 5, 6
c1, c2, c3 = 7, 8, 9
ls = [[a1, a2, a3], [b1, b2, b3], [c1, c2, c3]]
for i in range(len(ls)):
ls[i][0] = 100
print(ls)
print(a1, b1, c1)
""" Output:
[[100, 2, 3], [100, 5, 6], [100, 8, 9]]
1 4 7
"""
我想我正在进入“复制”与“深层复制”的领域。 我该怎么做?
这里的问题是 Python
int
值是不可变的,并且您没有在 a1
中存储对 a2
、ls
等变量的引用。相反,您存储的是这些变量指向的值,这些值是不可变的。
如果我们使用可变类型,我们会看到类似于您所期望的内容。
>>> a1, a2 = [1,2], [3,4]
>>> ls = [a1, a2]
>>> ls
[[1, 2], [3, 4]]
>>> ls[0].append(56)
>>> ls
[[1, 2, 56], [3, 4]]
>>> a1
[1, 2, 56]
但是
ls[0]
仍然不包含任何对 a1
的引用。
>>> a1 = 42
>>> ls
[[1, 2, 56], [3, 4]]
只是当时,
a1
和ls[0]
都是同一个可变的list
值的名称。然后,我们通过为 a1
指定不同值的名称来更改它。