Appearance
拷贝
- 变量进行不同方式复制
赋值
- 数据是全部共享的
python
a = [1, 2, 3, [11, 12, 13]]
b = a
a.append(4)
print(a,b,id(a),id(b)) # [1, 2, 3, [11, 12, 13], 4] [1, 2, 3, [11, 12, 13], 4] 4297620544 4297620544浅拷贝
- 只有第一层数据共享,其他层数据不共享
- 拷贝速度快,占用空间少,拷贝效率高
python
import copy
a = [1, 2, 3, [11, 12, 13]]
b = copy.copy(a) # 浅拷贝 第一层数据不是共享的,第二层数据是共享的
print(b) # [1, 2, 3]
a.append(4) # 修改对象a 第一层数据
a[3].append(14) # 修改对象a 第二层数据
print(a,b,id(a),id(b)) # [1, 2, 3, [11, 12, 13, 14], 4] [1, 2, 3, [11, 12, 13, 14]] 4297620544 4297620576深拷贝
- 所有层数据都不共享
- 拷贝速度慢,占用空间多,拷贝效率低
python
import copy
a = [1, 2, 3, [11, 12, 13]]
c = copy.deepcopy(a) # 深拷贝 a和c指向不同的对象, 所以a修改时c不会修改
a.append(4)
a[3].append(14)
print(a,c,id(a),id(c)) # [1, 2, 3, [11, 12, 13, 14], 4] [1, 2, 3, [11, 12, 13]] 4301061184 4301671168