关于python中的深复制和浅复制

在python中给对象赋值有三种方法:赋值、深拷贝、浅拷贝,但这三种方法如果使用不当,会造成意想不到的后果,本文就讲一下这三种方法的区别

一、赋值法 赋值法传递的是对象的引用,新对象并没有创建新的内存空间,原对象变化,新对象也会变化。

In [2]:
a=[1,2,3,[4,5]]
b=a
a.append(6)
print('a is {}'.format(a))
print('b is {}'.format(b))
a is [1, 2, 3, [4, 5], 6]
b is [1, 2, 3, [4, 5], 6]

二、浅拷贝 浅拷贝创建了新的内存空间,其内容就是原对象的引用。

In [10]:
import copy
a=[1,2,3,[4,5]]
b=copy.copy(a)
print('b的初始值是{}'.format(b))
a[2]=8
a[3].append(6)
print('a is {}'.format(a))
print('b is {}'.format(b))
b的初始值是[1, 2, 3, [4, 5]]
a is [1, 2, 8, [4, 5, 6]]
b is [1, 2, 3, [4, 5, 6]]

三、深拷贝 深拷贝创建了新的内存空间,其内容就是原对象的内容

In [12]:
import copy
a=[1,2,3,[4,5]]
b=copy.deepcopy(a)
print('b的初始值是{}'.format(b))
a[2]=8
a[3].append(6)
print('a is {}'.format(a))
print('b is {}'.format(b))
b的初始值是[1, 2, 3, [4, 5]]
a is [1, 2, 8, [4, 5, 6]]
b is [1, 2, 3, [4, 5]]