Skip to content

拷贝

  • 变量进行不同方式复制

赋值

  • 数据是全部共享的
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