说明
《Python 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
Python 的内置可变容器对象的 copy() 方法,创建一个创建浅拷贝。此方法 必须是一个容器类型, 支持列表(list)、字节数组(bytearray)、字典(dict)和集合(set)等类型。
以下是一些使用方法:
lst = [1, 2, [3, 4]]
lst_c = lst.copy()
lst_c
# [1, 2, [3, 4]]
lst[-1][0] = 5
lst_c
# [1, 2, [5, 4]]
容器类型的 copy() 它的语法为:
s.copy() # 通用语法
list.copy() # 列表
bytearray.copy() # 字节数组
dict.copy() # 字典
set.copy() # 集合
frozenset.copy() # 不可变集合
copy() 创建一个浅拷贝 (等同于 s[:]
)
包括 clear() 和 copy() 是为了与不支持切片操作的可变容器 (例如 dict 和 set) 的接口保持一致。 copy() 不是 collections.abc.MutableSequence ABC 的一部分,但大多数具体的可变序列类都提供了它。
Python 3.3 新版功能: clear() 和 copy() 方法。
copy() 不是一个原地操作(inplace),执行时需要将这个拷贝赋值给一个变量。
frozenset 虽然是不可变对象,但它也实现了 copy() 方法,我猜测它是为了和 set 兼容吧。
不可变对象没有 copy() 浅拷贝,因为没有意义,相当于直接改变引用了。
如果需要深拷贝,则需要使用内置库的 copy.deepcopy()
函数。
关于浅拷贝和深拷贝复制对象和其他背景知识,可以访问:标准库 copy 复制操作。
更新时间:2022-05-25 15:40:55 标签:python copy 复制 拷贝 容器