赋值,就是创建了对象的一个新的引用,修改其中任意一个变量都会影响到另一个。
浅拷贝:创建一个新的对象,但它包含的是对原始对象中包含项的引用(如果用引用的方式修改其中 一个对象,另外一个也会修改改变)
深拷贝:创建一个新的对象,并且递归的复制它所包含的对象(修改其中一个,另外一个不会改变)
# -*- coding: utf-8 -*-
#!/usr/bin/env python
# @Time : 2018/6/29 11:26
# @Software: PyCharm
# 一般有三种方法
alist = [4, 5, 6, ["a", "b"]]
# 直接赋值, 传递对象的引用而已, 原始列表改变,被赋值的b也会做相同的改变
def ass():
b = alist
print b
alist.append(5)
print alist;
print b
# copy浅拷贝,没有拷贝子对象,所以原始数据改变,子对象会改变
def acopy():
import copy
c = copy.copy(alist)
print alist;
print c
alist.append(5)
print alist;
print c
#子对象,结果里面的子对象被改变了
print alist[3]
alist[3].append('c')
print alist;
print c
# 深拷贝,包含对象里面的自对象的拷贝,所以原始对象的改变不会造成深拷贝里任何子元素的改变
def deepcopy():
import copy
d = copy.deepcopy(alist)
print alist;
print d
print "结果始终没有改变"
alist.append(5)
print alist;
print d
print "结果始终没有改变"
print alist[3]
alist[3].append("ccccc")
print alist;
print d
print "结果始终没有改变"
if __name__ == '__main__':
print "赋值"
ass()
print "浅拷贝"
acopy()
print "深拷贝"
deepcopy()