浅复制list.copy()的解释

2017-11-07  本文已影响0人  goodAndBad

1

a = [1,2,3,4]
b = a.copy()
b.append(5)
print(a,b)

输出:[1,2,3,4] [1,2,3,4,5]
对b的修改没有影响a的数据。

2

a = [[1],2,3,4]
b = a.copy()
b[0].append(2)
print(a,b)

输出:[[1,2],2,3,4] [[1,2],3,4]
对b的修改有影响a的数据。

区别

b = a.copy() 就等于

b = []
for i in a:
    b.append(i)
return b

对于 基本数据(不可修改) int string,就想象成值复制(实际并不是)。
对于 list tupe map,就想象成引用复制(这确实是引用复制)。

a = 1
b = a
b = 2
print(a,b)

输出 1,2
值复制就上面像这样。

a = [1]
b = a
b .append(2)
print(a,b)

输出: [1,2] [1,2]
引用复制就上面这样,修改被引用的值,就把引用这个值的变量全修改了。

浅复制是这样,它不管是引用or基本数据,就复制。
深复制像下面这样,判断是不是引用类型,只有不是引用类型才复制。

a = [[1],2,3,4]
b = []
for i in a:
    if isinstance(i,list):
        b.append(i.copy())
    else:
        b.append(i)

这段代码只能深复制 两层嵌套 的list.
以上。

上一篇下一篇

猜你喜欢

热点阅读