python 直接赋值 深拷贝 浅拷贝
2022/3/8 17:14:47
本文主要是介绍python 直接赋值 深拷贝 浅拷贝,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
目录- 直接赋值
- 浅拷贝
- 深拷贝
python中的深拷贝与浅拷贝与C&C++中略有不同,后者主要是对于指针指向内存空间的重新开辟,否则两个指针会共享一块内存,而python中是三种不同层次的共享。其中直接复制是用 = ,浅拷贝和深拷贝则要使用copy模块实现。
直接赋值
d = {'country':'China', 'age': '18', 'name': 'Kang'} a = d print(a, d) d['age'] = 100 print(a, d) d['like'] = 'pingpong' print(a, d)
输出:
{'country': 'China', 'age': '18', 'name': 'Kang'} {'country': 'China', 'age': '18', 'name': 'Kang'} {'country': 'China', 'age': 100, 'name': 'Kang'} {'country': 'China', 'age': 100, 'name': 'Kang'} {'country': 'China', 'age': 100, 'name': 'Kang', 'like': 'pingpong'} {'country': 'China', 'age': 100, 'name': 'Kang', 'like': 'pingpong'}
直接赋值的时候 a与d完全相同,类似C中的引用概念,是一个对象的两个别名,因此无论是改变d中原有元素还是给d添加新的元素,a都是随之改变。
浅拷贝
直接赋值是两个对象完全共享,浅拷贝则是共享拷贝时候已有的元素,对于添加的新元素则不共享。
import copy d = {'country':'China', 'age': '18', 'name': 'Kang'} a = copy.copy(d) print(a, d) d['age'] = 100 print(a, d) d['like'] = 'pingpong' print(a, d)
输出:
{'country': 'China', 'age': '18', 'name': 'Kang'} {'country': 'China', 'age': '18', 'name': 'Kang'} {'country': 'China', 'age': '18', 'name': 'Kang'} {'country': 'China', 'age': 100, 'name': 'Kang'} {'country': 'China', 'age': '18', 'name': 'Kang'} {'country': 'China', 'age': 100, 'name': 'Kang', 'like': 'pingpong'}
嗯,第三行是对的,对于新添加的元素不会共享。但本来以为改变原字典d的age的值,a会跟着改变的,毕竟age是共享时已有的元素嘛,但这里发现好像打脸了,第二行输出d的age改变而a没有改变,这是因为字典的值更改了以后就相当于一个新的元素了。以下小实验可验证:
d = {'age': 18} print(id(d['age'])) d['age'] = 10000 print(id(d['age']))
输出为:
93899669444160 139985819449552
可以认为id()函数输出对象的地址,可以看到这里地址已经改变了,所以d的age键值对改变前后是两个元素。
即,浅拷贝时子元素共享是对的,但是要注意改变子元素时有没有改变其地址,把原本共享的子元素对象直接改成另一个对象,那肯定不再共享了。
深拷贝
a = copy.deepcopy(d)
这种情况下a和d完全不相关,不存在任何共享。
这篇关于python 直接赋值 深拷贝 浅拷贝的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南
- 2024-11-16`PyMuPDF4LLM`:提取PDF数据的神器
- 2024-11-16四种数据科学Web界面框架快速对比:Rio、Reflex、Streamlit和Plotly Dash
- 2024-11-14获取参数学习:Python编程入门教程
- 2024-11-14Python编程基础入门