列表的复制方法
# 将旧的列表复制到新的列表中
我们应该使用
new = old[:]
而不应该使用
new = old
这将会使old和new同时指向列表对象。
# 原理
首先我们需要了解Python是如何管理对象和变量。Python没有C语言中的变量。在C语言中,变量不止是个名字,它是字节集合并真实存在于内存某个位置上。而在Python中,变量仅仅是指向对象的标签。
alist = [1, 3, 5]
blist = alist
alist 是指向 列表[1, 3, 5] 的标志,同样 b 也是 列表[1, 3, 5] 的标志,如果修改了 alist ,那么 blist 也会发生变化。
使用内建函数 id() 查看唯一地址:
alist = [1, 3, 5]
blist = alist
print(id(alist))
>>>19005032
print(id(blist))
>>>19005032
为了获得一个新的列表,我们应该创建新的列表,这即是:
alist = [1, 3, 5]
blist = alist[:]
print(id(alist))
>>>16580200
print(id(blist))
>>>46600072
# 解锁更多姿势
当然,复制列表还有别的方法:
# list() 方法
alist = [1, 3, 5]
blist = list(alist)
print(id(alist))
>>>51117672
print(id(blist))
>>>52802824
# copy() 方法(Python3)
alist = [1, 3, 5]
blist = alist.copy()
print(id(alist))
>>>44695144
print(id(blist))
>>>46337960
显然,我们可以看到 list() 方法和 copy() 方法具有更强的可读性,切片虽然Pythonic,但牺牲了代码的可读性,也将没有接触过Python的人拒之门外。