Python 中的引用与复制
2013-10-22 10:01
246 查看
Python 中对于一个对象的操作有引用与复制,但这两种有一个很大的区别就是引用对象的修改会影响被引用对象的内容,复制可以分为深复制与浅复制,浅复制的修改共享数据时也会影响被复制对象的内容。
此时如果修改了共享的数据,a也会变化
注意此时a没有变化
引用
在程序中像a=b,这样的赋值时,就会创建一个对b对象的新引用。对于数字和字符串这样的不可以变的对象,这种赋值实际上创建了一个b的副本。对于可变对象(如字典和列表)引用对象的改变会改变被引用对象的内容。>>> a=[1,2,3,4] >>> b=a >>> a [1, 2, 3, 4] >>> b [1, 2, 3, 4] >>> b is a True >>> type(a) == type(b) True >>> b[2] 3 >>> b[2]=-100 >>> b [1, 2, -100, 4] >>> a [1, 2, -100, 4]
浅复制
浅复制将创建一个新的对象,但它包含的是对原始对象中包含的项的引用。>>> a =[1,2,[3,4]] >>> b =list(a) >>> a [1, 2, [3, 4]] >>> b [1, 2, [3, 4]] >>> b.append(100) >>> b [1, 2, [3, 4], 100] >>> a [1, 2, [3, 4]] >>> b[2][0]=-100 >>> a [1, 2, [-100, 4]] >>> b [1, 2, [-100, 4], 100] >>>
此时如果修改了共享的数据,a也会变化
深复制
深复制将创建一个新对象,并且递归的复制它所包含的所有对象工作,可以使用copy.deepcopy()函数完成该工作。>>> import copy >>> a=[1,2,[3,4]] >>> b=copy.deepcopy(a) >>> a [1, 2, [3, 4]] >>> b [1, 2, [3, 4]] >>> b[2][0]=-100 >>> a [1, 2, [3, 4]] >>> b [1, 2, [-100, 4]] >>>
注意此时a没有变化
相关文章推荐
- python函数参数是值传递还是引用传递(以及变量间复制后是否保持一致):取决于对象内容可变不可变
- python的复制与引用
- Python引用和深、浅复制时的元素地址问题
- python引用和复制
- 【Python基本知识】 Python中,函数参数的引用和复制
- Python中引用复制、分片复制、完整复制
- python知识点(三):复制(引用、拷贝、浅拷贝和深拷贝)
- python中引用与复制用法实例分析
- Python入门的36个例子 之 23 -> Objects and References —— 复制引用还是复制实体对象
- python复制与引用用法分析
- Python中对象的引用与复制代码示例
- Python引用复制,参数传递,弱引用与垃圾回收
- Python复制引用而不是数据
- python 引用和复制
- Python中对象的引用与复制
- python 引用与复制
- python引用和复制一个对象
- python中引用与复制用法实例分析
- python对象的复制问题,按值传递?引用传递?
- 【python摘录03】'引用'和复制