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
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐