深浅拷贝
1.以后尽量避免
2.面试必问
赋值, =
浅拷贝
深拷贝
a = [1,2,3,4]
b = a
print(id(a),id(b))
print(a is b)
a.append(5)
print(b)
a = [1,2,3,4]
b = a
#
a.append([1,2,3])
print(b)
copy -- 拷贝
a = [1,2,3,4,5]
b = a.copy()
print(id(a[0]))
print(id(b[0]))
a = [1,2,3,[4,5]]
b = a[:] # 浅拷贝
print(id(a[-1][0]))
print(id(b[-1][0]))
a.append(9) # 010101
print(a)
print(b) # 010111
a = [1,2,3,[4,5]]
b = a[:] # 浅拷贝
a[-1].append(6)
print(b)
a = [1,2,3,[4,5,6,[9,10]],67]
b = a # 赋值
b = a[:]
a[-2].append(10)
a[-2][-1].append(10)
print(b)
a = [1,2,3,[4,5,6,[9,10]],67]
b = a[:]
b[-1] = 7
print(a)
print(b)
a = [1,2,3,[4,5,6,[9,10]],67]
b = a[:]
b[-2][-1].append(11)
print(a)
print(b)
a = [1,2,[10,7,8],4]
b = a[:]
b[-2] = 90
print(a)
print(b)
浅拷贝:只拷贝第一层元素的地址,只有修改第一层的时候源数据不受影响,
给可变数据类型进行添加的时候源数据会受影响
= 是修改 .append是添加
深拷贝:
import copy # 导入 copy模块
a = [1,2,3,[4,5],6]
b = copy.deepcopy(a)
print(id(a[-2]))
print(id(b[-2]))
print(a)
print(b)
print(a == b)
print(id(a),id(b))
print(a is b)
赋值: 将多个变量指向一个同一个内存地址就是赋值
浅拷贝: 只拷贝第一层元素的地址,只有修改拷贝的数据第一层的时候源数据不受影响,
给可变数据类型进行添加的时候源数据会受影响
= 是修改 .append是添加 可变数据类型能够修改和添加,不可变数据类型只能修改
深拷贝: 不可变数据类型内存地址共用,可变数据类型新开辟一个空间