python
来源:互联网 发布:linux 注销登录用户 编辑:程序博客网 时间:2024/06/07 14:49
浅拷贝:只拷贝地址,不拷贝内容
深拷贝:只拷贝内容, 不拷贝地址
以下直接举例说明
粟子 一
a = [11, 22, 33]b = a # 浅拷贝print(id(a))print(id(b))
打印结果
44911541844491154184
直接将一个变量赋值给另一个变量为浅拷贝,a与b都指向同一块内存地址
粟子 二
import copya = [11, 22, 33]b = copy.deepcopy(a)print("a的地址:%s a = %s"%(id(a),a))print("b的地址:%s b = %s"%(id(b),b))
打印结果
a的地址:4352090888 a = [11, 22, 33]b的地址:4352091016 b = [11, 22, 33]
copy. deepcopy为深拷贝
粟子 三
import copya = [11, 22, 33]b = [44, 55, 66]c = [a, b]d = copy.deepcopy(c)a.append(123)print("c的地址:%s c的a值:%s"%(id(c), c[0]))print("d的地址:%s d的a值:%s"%(id(d), d[0]))
打印结果
c的地址:4407994888 c的a值:[11, 22, 33, 123]d的地址:4407993800 d的a值:[11, 22, 33]
从打印的结果可以看出,d与c的地址不一样,d中的a与c中的a不一样,说明了copy.deepcopy()的深拷贝是递归拷贝,将变量中所引用的变量也进行内容上的拷贝
粟子 四
import copya = [11, 22, 33]b = [44, 55, 66]c = [a, b]d = copy.copy(c)a.append(123)print("c的地址:%s c的a值:%s"%(id(c), c[0]))print("d的地址:%s d的a值:%s"%(id(d), d[0]))
打印结果
c的地址:4464011784 c的a值:[11, 22, 33, 123]d的地址:4464010696 d的a值:[11, 22, 33, 123]
d与c的地址不一样,但是d中的a与c中的a一样,说明了copy.copy()的只进行第一层的深拷贝
粟子 五
import copya = [11, 22, 33]b = [44, 55, 66]c = (a, b)d = copy.copy(c)print("c的地址:%s"%(id(c)))print("d的地址:%s"%(id(d)))a.append(123)print("c中的a: %s"%(c[0]))print("d中的a: %s"%(d[0]))
打印结果
c的地址:4546477576d的地址:4546477576c中的a: [11, 22, 33, 123]d中的a: [11, 22, 33, 123]
使用copy.copy()拷贝一个不可变类型的变量时为浅拷贝,如果拷贝变量为可变类型时则只深拷贝第一层
阅读全文
0 0
- Python
- Python
- Python
- python
- Python
- PYTHON
- Python
- Python
- Python
- Python
- Python
- Python
- Python
- Python
- Python
- Python
- python
- Python
- epoll+socket实现并发服务器 Linux C(版本一)
- 【OpenCV入门教程之十五】水漫金山:OpenCV漫水填充算法(Floodfill)
- loj#6169. 相似序列
- Java面试题集(第六部分)(136-150)
- bzoj1836: Pku3004 Subway planning
- python
- CodeForces 149D Coloring Brackets
- linux部署服务器遇到的问题(三)
- 【实践】时间同步配置
- POJ 1141 Brackets Sequence
- HDU 2476 String painter
- POJ 1651 Multiplication Puzzle
- RSA加密算法 C++实现
- Java的Comparable接口&比较器原理