失败记录
尝试将原列表a备份,对b进行插入操作。但就结果看,a、b的元素都发生了变化。
list_a = [1, 2]
list_b = list_a # 试图将a备份为b,对b的操作不影响a
list_b.insert(0, 3) # 向b下标0处(头部)插入元素3
print(list_a, list_b) # [1, 2, 3] [1, 2, 3]
考虑是由于浅拷贝的原因,a、b都指向同一个列表。
正确做法
做法1:
list_a = [1, 2]
list_b = list_a[:]
list_b.insert(0, 3) # 向b下标0处(头部)插入元素3
print(list_a, list_b) # [1, 2] [1, 2, 3]
做法2:list()
list_a = [1, 2]
list_b = list(list_a)
list_b.insert(0, 3) # 向b下标0处(头部)插入元素3
print(list_a, list_b) # [1, 2] [1, 2, 3]
做法3:extend()
list_a = [1, 2]
list_b = []
list_b.extend(list_a)
list_b.insert(0, 3) # 向b下标0处(头部)插入元素3
print(list_a, list_b) # [1, 2] [1, 2, 3]
通过将b生成为与a元素一致的新列表,达到深拷贝的目的。
对于对象复制/拷贝的操作一定注意深/浅拷贝的区别,由于表面语句符合逻辑导致这类问题不易察觉,很容易犯错 :)