copy模块


Python 中赋值语句 不复制对象 ,而是在目标和对象之间创建 绑定(bindings) 关系。对于自身可变或者包含可变项的集合对象,开发者有时会需要生成其副本用于改变操作,进而避免改变原对象。

官方文档,本模块提供了通用的浅层复制和深层复制操作:

  • copy.copy()
    • 浅拷贝,拷贝父对象,不会拷贝对象的内部的子对象,也就是子对象公用
      • 如果子对象是不可变数据类型,那么复制的对象和原来的对象互不影响
      • 如果子对象是可变数据类型,那么复制的对象是原来对象的引用
  • copy.deepcopy()
    • 深拷贝,完全拷贝父对象和子对象,复制的对象和原来对象互不关联
# 关于拷贝的机制

import copy
a=[1,2,3,['a','b']] #原始对象
b=a                 #赋值,传对象的引用
c=copy.copy(a)      #浅拷贝
d=copy.deepcopy(a)  #深拷贝

a.append(5)
a[3].append('c')

print(a)
# -->[1, 2, 3, ['a', 'b', 'c'], 5]

print(b)
# -->[1, 2, 3, ['a', 'b', 'c'], 5]

print(c)
# -->[1, 2, 3, ['a', 'b', 'c']]

print(d)
# -->[1, 2, 3, ['a', 'b']]
#关于同数据,字符串+=

a="abc"
b=a
print(id(a),id(b))  #-->1652389179952 1652389179952
c="abc"
d=""
d+=c
print(id(c),id(d))  #-->1652389179952 1652389179952
print(d)            #-->abc
d+=c
print(d,id(d),id(c))#-->abcabc 1652431257904 1652389179952

文章作者: ╯晓~
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 ╯晓~ !
评论
  目录