python中直接复制,浅拷贝,深拷贝

  • 直接复制:其实就是对象的引用
  • 浅拷贝(copy):拷贝父对象,不会拷贝对象内部的子对象
  • 深拷贝(deepcopy):完全拷贝父对象及其子对象

字典浅拷贝:

>>> a = {1:[1,2,3]}
>>> b = a.copy()
>>> a,b
({1: [1, 2, 3]}, {1: [1, 2, 3]})
>>> a[1].append(4)
>>> a,b
({1: [1, 2, 3, 4]}, {1: [1, 2, 3, 4]})

深拷贝:

>>> import copy
>>> c = copy.deepcopy(a)
>>> a,c
({1: [1, 2, 3, 4]}, {1: [1, 2, 3, 4]})
>>> a[1].append(5)
>>> a,c
({1: [1, 2, 3, 4, 5]}, {1: [1, 2, 3, 4]})

1. b=a:赋值引用,a和b都指向同一对象。

 2. b=a.copy(): 浅拷贝,a和b是独立的对象,但他们的子对象还是指向同一对象(是引用)

 3. b=copy.deepcopy(a): 深拷贝,a和b完全拷贝了父对象和子对象,两者是完全独立的;

 关于深拷贝和浅拷贝实例:

>>> import copy
>>> a = [1,2,3,4,['a','b']]            #原始对象
>>> b = a                              #赋值,传对象的引用
>>> c = copy.copy(a)            #浅拷贝
>>> d = copy.deepcopy(a)               #深拷贝
>>> a.append(5)                        #修改对象a
>>> a[4].append('c')                   #修改对象a中['a','b']数组对象
>>> print('a = ',a)
a =  [1, 2, 3, 4, ['a', 'b', 'c'], 5]
>>> print('b = ',b)
b =  [1, 2, 3, 4, ['a', 'b', 'c'], 5]
>>> print('c = ',c)
c =  [1, 2, 3, 4, ['a', 'b', 'c']]
>>> print('d = ',d)
d =  [1, 2, 3, 4, ['a', 'b']]
原文地址:https://www.cnblogs.com/homle/p/13224781.html