Python3 深拷贝浅拷贝
感觉对深拷贝浅拷贝有一点混淆。特地写了几行,方便自己查看一下他们的区别
import copy
if __name__ == "__main__":
str = "\nn={0}\taddr:{4}\na={1}\taddr:{5}\nb={2}\taddr:{6}\nc={3}\taddr:{7}\n"
# 基数
n = [100,101,[200,201]]
# 直接相等赋值
a = n
# copy拷贝
b = copy.copy(n)
# deepcopy 拷贝
c = copy.deepcopy(n)
# 输出查看变化
print("修改n前变化:" + str.format(n,a,b,c,id(n),id(a),id(b),id(c)))
# n追加后变化
n.append(301)
print("n追加后变化:" + str.format(n,a,b,c,id(n),id(a),id(b),id(c)))
# n子节点追加后变化
n[2].append(11)
print("n子节点追加后变化:" + str.format(n,a,b,c,id(n),id(a),id(b),id(c)))
# 改变n子节点内容后变化
n[2] = [1111,1112]
print("改变n子节点内容后变化:" + str.format(n,a,b,c,id(n),id(a),id(b),id(c)))
下面是运行结果:
从结果可以看出
当直接赋值时,a和n的地址是一样的。而不管深拷贝和浅拷贝地址都是变化的。也就是说,列表n内数据改变时,列表a内的数据也会一起变化。而b,c不会。
当使用浅拷贝时,列表n内的子列表内数据变化时,b列表内的子列表也是一同变化的。也就是说,当使用浅拷贝时,拷贝深度仅为一个对象,而对象内的子对象的地址并不会改变。
当使用深拷贝时,列表c与列表n以及其内的子对象的变化互不影响。也可以理解为两个完全不相干的两个对象。
分类:
python
标签:
python3深拷贝和浅拷贝区别
, python3 copy
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗