python中的赋值、浅拷贝和深拷贝区别

1.直接赋值:在内存中的地址是一个,是对象的引用,

2.浅拷贝:藕断丝连,拷贝父对象,但不会拷贝对象内部的子对象,子对象还是引用

3.深拷贝:毫无关系,互不影响,完全拷贝父对象及其子对象,内容虽一样,但内存中的地址不是一个;

直接赋值实例:

>>> a=[1,2,3,4,["a","b"]]

>>> b=a

>>> id(a)

2307481148552   

>>> id(b)

2307481148552        #地址是一个,a和b都指向同一个对象

 

>>> a

[1, 2, 3, 4, ['a', 'b', 'c'], 6]

>>> b

[1, 2, 3, 4, ['a', 'b', 'c'], 6]    

浅拷贝实例:

>>> import copy

>>> a=[1,2,3,4,["a","b"]]

>>> c=copy.copy(a)

>>> c

[1, 2, 3, 4, ['a', 'b']]

>>> a.append(6)

>>> a[4].append("c")

 

>>> a

[1, 2, 3, 4, ['a', 'b', 'c'], 6]

>>> c

[1, 2, 3, 4, ['a', 'b', 'c']]

 

>>> id(a)

2307481148552

>>> id(c)

2307481256328    #地址不是一个,a和c都是一个独立的对象

 

>>> id(a[4])

2307481148360   

>>> id(c[4])

2307481148360    #子对象的地址还是一个,所以子对象还是指向统一对象(是引用)

深拷贝实例:

>>> a=[1,2,3,4,["a","b"]]

>>> import copy

>>> d=copy.deepcopy(a)

 

>>> id(a)

2307481148552

>>> id(d)

2307481256392   #地址不一样

 

>>> id(a[4])

2307481148360

>>> id(d[4])

2307481256264   #子对象地址也不一样,所以两者完全独立

猜你喜欢

转载自blog.csdn.net/weixin_37579123/article/details/81126618