python使用append向列表中添加列表元素时,改变添加的列表元素,之前添加的元素也发生变化
list1 = []
list2 = [0, 0]
a = 0
b = 0
for i in range(3):
a = a+1
b = b+1
list2[0] = a
list2[1] = b
list1.append(list2)
print(list1)
运行后输出为:
[[3, 3], [3, 3], [3, 3]]
原因是append添加元素时添加的是地址,而不是实际的值
list1 = []
list2 = [0, 0]
a = 0
b = 0
for i in range(3):
a = a+1
b = b+1
list2[0] = a
list2[1] = b
list1.append(list2)
for i in range(3):
print(list1[i])
print(id(list1[i]))
输出为:
[3, 3]
2269706976256
[3, 3]
2269706976256
[3, 3]
2269706976256
改进方法:每次改变元素前先初始化元素
list1 = []
a = 0
b = 0
for i in range(3):
list2 = [0, 0]
a = a+1
b = b+1
list2[0] = a
list2[1] = b
list1.append(list2)
for i in range(3):
print(list1[i])
print(id(list1[i]))
输出为:
[1, 1]
2991076274240
[2, 2]
2991077617792
[3, 3]
2991077612992