Python标准库之copy

1. copy标准库简介

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

2. copy常用函数

2.1 copy.copy(x)

对任意Python对象做浅拷贝操作

2.2 copy.deepcopy(x, memo=None, _nil=[])

对任意Python对象做深拷贝操作

2.3 浅拷贝和深拷贝使用对比

浅层复制和深层复制之间的区别仅与复合对象 (即包含其他对象的对象,如列表或类的实例) 相关:

  • 一个 浅层复制 会构造一个新的复合对象,然后(在可能的范围内)将原对象中找到的 引用 插入其中。
  • 一个 深层复制 会构造一个新的复合对象,然后递归地将原始对象中所找到的对象的 副本 插入。
import copy

# 1.创建包含可变对象list的复合对象
tup=(1,1.2,2+3j,["hello","world"])
# 2.创建自身可变的复合对象
ls=["cyr",0xfff,2e-3,[5,"day"]]
# 对1.做浅拷贝和深拷贝
shallow_copy_tup,deep_copy_tup=copy.copy(tup),copy.deepcopy(tup)
# 对2.做浅拷贝和深拷贝
shallow_copy_ls,deep_copy_ls=copy.copy(ls),copy.deepcopy(ls)

"""
is关键字用于判断是否是一个对象,即内存地址是否一致
==关系运算符用于判断两个对象的逻辑相等性,即内容是否相同
"""
print("""
浅拷贝与包含可变对象list的原始复合对象是否是一个对象?{} 内容是否相同?{}
深拷贝与包含可变对象list的原始复合对象是否是一个对象?{} 内容是否相同?{}
浅拷贝与自身可变的原始复合对象是否是一个对象?{} 内容是否相同?{}
深拷贝与自身可变的原始复合对象是否是一个对象?{} 内容是否相同?{}
""".format(shallow_copy_tup is tup,shallow_copy_tup==tup,deep_copy_tup is tup,deep_copy_tup==tup,
          shallow_copy_ls is ls,shallow_copy_ls==ls,deep_copy_ls is ls,deep_copy_ls==ls))

# 对原始复合对象做修改
tup[-1].append("Python")
ls[-1].append(2022)

print("""
修改包含可变对象list的原始复合对象后为{}
浅拷贝为{}
深拷贝为{}
修改自身可变的原始复合对象后为{}
浅拷贝为{}
深拷贝为{}
""".format(tup,shallow_copy_tup,deep_copy_tup,ls,shallow_copy_ls,deep_copy_ls))

在这里插入图片描述

3.参考文献

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值