Python里面如何拷贝一个对象

1.赋值(=),就是创建了对象的一个新的引用,修改其中任意一个变量都会影响到另一个。

In [168]: a
Out[168]: [1, 2, 3]

In [169]: b=a

In [170]: a.append(4)

In [171]: a
Out[171]: [1, 2, 3, 4]

In [172]: b
Out[172]: [1, 2, 3, 4]

 

2.浅拷贝:创建一个新的对象,但它包含的是对原始对象中包含项的引用(copy模块的copy()函数)

 

In [187]: import copy#copy浅拷贝,没有拷贝子对象,所以原始数据改变,子对象会改变

In [188]: a=[1,2,3,4,['a','b']]

In [189]: c=copy.copy(a)

In [190]: a.append(5)

In [191]: a
Out[191]: [1, 2, 3, 4, ['a', 'b'], 5]

In [192]: c
Out[192]: [1, 2, 3, 4, ['a', 'b']]

In [193]: a[4].append('c')

In [194]: a
Out[194]: [1, 2, 3, 4, ['a', 'b', 'c'], 5]

In [195]: c
Out[195]: [1, 2, 3, 4, ['a', 'b', 'c']]

 

3.深拷贝:创建一个新的对象,并且递归的复制它所包含的对象(修改其中一个,另外一个不会改变)(copy模块的deep.deepcopy()函数)

In [196]: import copy

In [197]: a=[1,2,3,4,['a','b']]

In [198]: c=copy.deepcopy(a)

In [199]: a.append(5)

In [200]: a
Out[200]: [1, 2, 3, 4, ['a', 'b'], 5]

In [201]: c
Out[201]: [1, 2, 3, 4, ['a', 'b']]

In [202]: a[4].append('c')

In [203]: a
Out[203]: [1, 2, 3, 4, ['a', 'b', 'c'], 5]

In [204]: c
Out[204]: [1, 2, 3, 4, ['a', 'b']]

综上所述,浅copy和深copy:

  copy浅拷贝(copy.copy()),没有拷贝子对象,所以原始数据改变,子对象会改变

       深copy的相同在于(copy.deepcopy()),包含对象里面的自对象的拷贝,所以原始对象的改变不会造成深拷贝里任何子元素的改变

       它们的相同之处是,父对象都没有改变!

posted @ 2018-11-23 20:21  时间带着假象流淌  阅读(1325)  评论(0编辑  收藏  举报