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.
以上。
网友评论