Created
December 18, 2018 13:46
-
-
Save caoya171193579/1d5550ebea8972dbd50249f3fd7323b9 to your computer and use it in GitHub Desktop.
入门
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
浅拷贝和深拷贝 (milo) | |
1、浅拷贝:所谓浅拷贝就是对引用的拷贝 (只拷贝父对象) | |
2、深拷贝 : 所谓深拷贝就是对对象的资源的拷贝。 | |
列子: | |
>>> a=[1,2,3,'a','b','c'] (定义一个列表a) | |
>>> b=a (b 调用 a 的值,等于a和b是同一个列表了) | |
>>> b | |
[1, 2, 3, 'a', 'b', 'c'] | |
>>> a (a、b 叫变量、标签、对象都可以) | |
[1, 2, 3, 'a', 'b', 'c'] | |
>>> id(a) (查看a和b的系统位置编码是相同的) | |
139992285697736 | |
>>> id(b) | |
139992285697736 | |
>>> a.append('d') (给列表a 添加一个元素'd', b也会跟着也添加上了) | |
>>> a | |
[1, 2, 3, 'a', 'b', 'c', 'd'] | |
>>> b | |
[1, 2, 3, 'a', 'b', 'c', 'd'] | |
>>> b.append(4) (给列表b 添加一个元素,同样a 也添加了,因为a b 的位置编码是相同的不管是添加或者删除、更改,a b 都会同步) | |
>>> a | |
[1, 2, 3, 'a', 'b', 'c', 'd', 4] | |
>>> b | |
[1, 2, 3, 'a', 'b', 'c', 'd', 4] | |
###################################################################### | |
在python中,对象赋值实际上是对象的引用。当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用 | |
一般有三种方法, | |
alist=[1,2,3,["a","b"]] (定义了一个二元列表 alist) | |
(1)直接赋值,默认浅拷贝传递对象的引用而已,原始列表改变,被赋值的b也会做相同的改变 | |
>>> b=alist | |
>>> print b (展示b 的值) | |
[1, 2, 3, ['a', 'b']] | |
>>> alist.append(5) | |
>>> print alist;print b | |
[1, 2, 3, ['a', 'b'], 5] | |
[1, 2, 3, ['a', 'b'], 5] | |
(2)copy浅拷贝,没有拷贝子对象,所以原始数据改变,子对象会改变 ,方法:(拷贝对象=copy.copy(被拷贝对象)) | |
>>> import(哎m跑特:调用) copy (调用 copy 模块) | |
>>> c=copy.copy(alist) | |
>>> print alist;print c | |
[1, 2, 3, ['a', 'b']] | |
[1, 2, 3, ['a', 'b']] | |
>>> alist.append(5) | |
>>> print alist;print c | |
[1, 2, 3, ['a', 'b'], 5] | |
[1, 2, 3, ['a', 'b']] | |
>>> alist[3] | |
['a', 'b'] | |
>>> alist[3].append('cccc') | |
>>> print alist;print c | |
[1, 2, 3, ['a', 'b', 'cccc'], 5] | |
[1, 2, 3, ['a', 'b', 'cccc']] 里面的子对象被改变了 | |
(3)深拷贝,包含对象里面的自对象的拷贝,所以原始对象的改变不会造成深拷贝里任何子元素的改变,方法:(拷贝对象=copy.deepcopy(被拷贝对象)) | |
>>> import copy (调用 copy 模块) | |
>>> d=copy.deepcopy(alist) | |
>>> print alist;print d | |
[1, 2, 3, ['a', 'b']] | |
[1, 2, 3, ['a', 'b']]始终没有改变 | |
>>> alist.append(5) | |
>>> print alist;print d | |
[1, 2, 3, ['a', 'b'], 5] | |
[1, 2, 3, ['a', 'b']]始终没有改变 | |
>>> alist[3] | |
['a', 'b'] | |
>>> alist[3].append("ccccc") | |
>>> print alist;print d | |
[1, 2, 3, ['a', 'b', 'ccccc'], 5] | |
[1, 2, 3, ['a', 'b']] 始终没有改变 | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment