我想实现一个列表复制的操作,于是我就写下了下面的代码:
list_1 = ['apple', 'banana', 'berry']
list_2 = list_1
list_2.remove('apple')
print(list_2)
print(list_1)
结果却是这个样子滴:
['banana', 'berry']
['banana', 'berry']
于是乎,我发现了一个问题,list_2 = list_1
这样写并不是真正的列表复制,而是list_2 的指针指向了list_1所拥有的内容,类似下面这样:
在网上搜索后,学会了很多:
# 内建函数id()可以返回对象的唯一id。该id是对象的内存地址。
print(id(list_1), id(list_2))
结果如下:
2594026121288 2594026121288
也就是两者的内存地址相同,再次证实我的想法!
那么到底如何才能真正地实现复制操作呢? 方法如下:
# 方法1:
list_2 = list_1[:]
# 方法2:
list_2 = list(list_1)
# 方法3:
list_2 = list_1 * 1
# 方法4:
import copy
list_2 = copy.copy(list_1)
# or
list_2 = copy.deepcopy(list_1)
我们再次执行上面的代码:
list_2.remove('apple')
print(list_2)
print(list_1)
print(id(list_1), id(list_2))
结果如下:
['banana', 'berry']
['apple', 'banana', 'berry']
2594030892616 2594030892424
完美解决问题!!!
图片截自于链接:https://www.cnblogs.com/ifantastic/p/3811145.html
感谢iFantasticMe