Python3 copy(深和浅拷贝的区别)
来源:互联网 发布:单片机无线模块程序 编辑:程序博客网 时间:2024/05/16 14:03
Python3 copy(深和浅拷贝的区别)
本文由 Luzhuo 编写,转发请保留该信息.
原文: http://blog.csdn.net/Rozol/article/details/71156387
以下代码以Python3.6.1为例
Less is more!
#!/usr/bin/env python# coding=utf-8__author__ = 'Luzhuo'__date__ = '2017/5/3'# copydemo.py copy深和浅拷贝# 深浅拷贝区别:# 1.浅拷贝:创建新的复合对象,然后将'引用'拷贝到该复合对象中。# 2.深拷贝:创建新的复合对象,然后'递归地将原始对象'拷贝到该复合对象中import copyclass Ls: def __init__(self, name): self.name = name @property def setname(self, name): self.name = name def __str__(self): return self.name __repr__ = __str__ def __iter__(self): return selflist_0 = ["A", "B", ["C", "D"], Ls("E")]def demo(): # --- 浅拷贝的拷贝方式 --- list_1 = copy.copy(list_0) list_2 = list_0.copy() list_3 = list_0[:] list_4 = list(list_0) # --- 深拷贝的拷贝方式 --- lists_d = copy.deepcopy(list_0) # --- 深浅拷贝的区别 --- # 1. 对第一层数据进行赋值 list_0[0] = "X0" list_1[0] = "X1" list_2[0] = "X2" list_3[0] = "X3" list_4[0] = "X4" lists_d[0] = "Xd" # 打印结果: 理所当然,所有列表都发生了变化 # list_0: ['X0', 'B', ['C', 'D'], E] # list_1: ['X1', 'B', ['C', 'D'], E] # list_2: ['X2', 'B', ['C', 'D'], E] # list_3: ['X3', 'B', ['C', 'D'], E] # list_4: ['X4', 'B', ['C', 'D'], E] # list_d: ['Xd', 'B', ['C', 'D'], E] # 2. 对第二层的list引用进行赋值 list_0[2][0] = "Y0" list_1[2][0] = "Y1" list_2[2][0] = "Y2" list_3[2][0] = "Y3" list_4[2][0] = "Y4" lists_d[2][0] = "Yd" # 打印结果: 0-1都被改成了同一个值,这说明浅拷贝只拷贝了第二层list的引用;而深拷贝则拷贝了数据结构 # list_0: ['X0', 'B', ['Y4', 'D'], E] # list_1: ['X1', 'B', ['Y4', 'D'], E] # list_2: ['X2', 'B', ['Y4', 'D'], E] # list_3: ['X3', 'B', ['Y4', 'D'], E] # list_4: ['X4', 'B', ['Y4', 'D'], E] # list_d: ['Xd', 'B', ['Yd', 'D'], E] # 3. 对第三层的Ls对象引用进行赋值 list_0[3].name = "Z0" list_1[3].name = "Z1" list_2[3].name = "Z2" list_3[3].name = "Z3" list_4[3].name = "Z4" lists_d[3].name = "Zd" # 执行结果: 继续验证了上方论点 # list_0: ['X0', 'B', ['Y4', 'D'], Z4] # list_1: ['X1', 'B', ['Y4', 'D'], Z4] # list_2: ['X2', 'B', ['Y4', 'D'], Z4] # list_3: ['X3', 'B', ['Y4', 'D'], Z4] # list_4: ['X4', 'B', ['Y4', 'D'], Z4] # list_d: ['Xd', 'B', ['Yd', 'D'], Zd] print("list_0: {}".format(list_0)) print("list_1: {}".format(list_1)) print("list_2: {}".format(list_2)) print("list_3: {}".format(list_3)) print("list_4: {}".format(list_4)) print("list_d: {}".format(lists_d))if __name__ == "__main__": demo()
0 0
- Python3 copy(深和浅拷贝的区别)
- Python3 copy(深和浅拷贝的区别)
- 深拷贝和浅拷贝(copy)的区别
- Deep copy(深拷贝)和shallow copy(浅拷贝)的区别
- iOS 浅拷贝和深拷贝的区别? copy和mutableCopy的区别?
- ios-关于深拷贝和浅拷贝和属性中的copy和strong的区别
- 深拷贝和浅拷贝:strong与 copy 区别
- retain、copy、mutableCopy的区别(深拷贝 浅拷贝)
- copy深拷贝和浅拷贝的理解和使用
- copy和mutableCopy的深、浅拷贝
- 浅拷贝和深拷贝 iOS 的copy 以及 mutablecopy
- Memberwise copy(深拷贝)与Bitwise copy(浅拷贝)的区别
- Memberwise copy(深拷贝)与Bitwise copy(浅拷贝)的区别
- Memberwise copy(深拷贝)与Bitwise copy(浅拷贝)的区别
- 深浅拷贝:即Deep Copy和Shallow Copy的区别
- 浅拷贝和深拷贝(shallow copy VS deep copy )
- 浅拷贝、深拷贝 Bitwise Copy和Memberwise Copy
- 深拷贝、浅拷贝、memberwise copy 和 bitwise copy
- 模板的特化和萃取
- 数据类型和变量初识
- Visual Studio 2012,运行后窗口闪退解决方法大全
- ListView中convertView和ViewHolder的工作原理
- [剑指offer]找到链表环的入口节点java
- Python3 copy(深和浅拷贝的区别)
- Java Socket:单线程/多线程/线程池ServerSocket编程
- Linux下各种环境配置(表格)
- 图像小波分解与重构
- Xshell连接不上虚拟机
- 解決 IDEA Create Maven Project 卡在 Downloading plugins for .....
- c++作业5
- Java中的CAS(Compare And Swap)
- linux_011之库函数setsid.c分析