Skip to content

Instantly share code, notes, and snippets.

@caoya171193579
Created December 18, 2018 13:46
Show Gist options
  • Save caoya171193579/1d5550ebea8972dbd50249f3fd7323b9 to your computer and use it in GitHub Desktop.
Save caoya171193579/1d5550ebea8972dbd50249f3fd7323b9 to your computer and use it in GitHub Desktop.
入门
浅拷贝和深拷贝 (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