Python学习笔记-对象的引用和拷贝
2019-06-16 23:27
148 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u010802176/article/details/92440795
对象的引用和拷贝
- 引用
赋值操作总是存储对象的引用,需要注意原处修改可变对象(列表,字典)时,可能影响程序中其他地方对相同对象的其他引用。
L1 = [1,2,3] L2 = ['a',L1,'3'] D1 = {'a':L1} print(L1) print(L2) print(D1)
运行结果:
[1, 2, 3] ['a', [1, 2, 3], '3'] {'a': [1, 2, 3]}
现在修改L1[1]的值在输出,可以看到L1在其他地方的引用也改变了:
L1 = [1,2,3] L2 = ['a',L1,'3'] D1 = {'a':L1} L1[1] = 'cc' print(L1) print(L2) print(D1)
运行结果:
[1, 'cc', 3] ['a', [1, 'cc', 3], '3'] {'a': [1, 'cc', 3]}
- 拷贝
拷贝的4种方法: 1. 没有限制条件的分片表达式L[:]能复制序列;
L1 = [1,2,3] L2 = L1[:] L1[1] = 'cc' print(L1) print(L2)
运行结果:
[1, 'cc', 3] [1, 2, 3]
2.字典copy方法可以复制字典;
D1 = {'a':'aa', 'b':'bb'} D2 = D1.copy() D1['a'] = 'cc' print(D1) print(D2)
运行结果:
{'a': 'cc', 'b': 'bb'} {'a': 'aa', 'b': 'bb'}
3.有些内置函数可以生成拷贝,如list
L1 = [1,2,3,4] L2 = list(L1) L1[1] = 5 print(L1) print(L2)
运行结果:
[1, 5, 3, 4] [1, 2, 3, 4]
4.copy标准库能够生成完整拷贝;
import copy L1 = [1,2,3,4] L2 = [L1,5,6,7] L3 = L2[:] #浅拷贝,只能顶层拷贝,嵌套的序列不能拷贝 L4 = copy.deepcopy(L2) #完整拷贝,包括里面嵌套的序列 L1[0] = 9 L2[1] = 11 #注意比较L2,L3的输出结果 print(L1) print(L2) print(L3) print(L4)
运行结果:
[9, 2, 3, 4] [[9, 2, 3, 4], 11, 6, 7] [[9, 2, 3, 4], 5, 6, 7] [[1, 2, 3, 4], 5, 6, 7]
注意:无限制分片拷贝和字典的copy方法,只能做顶层拷贝,不能拷贝嵌套的数据结构。
相关文章推荐
- Python学习笔记【引用VS拷贝】
- python学习笔记---对象赋值其实就是引用
- python学习笔记4(对象/引用;多范式; 上下文管理器)
- python学习笔记7:对象引用与对象
- Python 学习笔记 - 5.对象驻留
- Json.Net学习笔记(十) 保持对象引用
- python学习笔记:深拷贝,浅拷贝
- 微软企业库5.0学习笔记(六)创建并引用企业库对象
- python中的对象和引用 分类: python基础学习 2013-10-30 16:20 264人阅读 评论(0) 收藏
- Python 对象的引用计数和拷贝
- python2.7学习笔记(10) ——面向对象高级编程
- Python 学习笔记【文件对象】
- python学习笔记6-基本对象和流程语句整理
- Python核心编程--学习笔记--4--Python对象
- python赋值和拷贝----一切皆对象,参数皆引用
- python学习笔记(七) - 面向对象高级编程
- [C++学习笔记]--常量对象、常量成员函数和常引用
- python学习笔记六之初识面向对象上(基础篇)
- Python学习笔记(四)Python对象
- Json.Net学习笔记(十) 保持对象引用