浅复制与深复制

Python中所有的变量都是对象,Python常用的数据结构就是tuple、list、dict。和C++的不同之处在于将对象加入到容器之中的时候,Python对有些对象进行浅复制,对有些对象进行深复制。

jsonList=[]
tmpDict = {'fileSize':0,'fileType':'txt','fileName':'AAA'}
jsonList.append(tmpDict)
print jsonList
tmpDict['fileName'] = 'BBB'
tmpDict['fileSize'] = 10
tmpDict['fileType'] = 'xml'
jsonList.append(tmpDict)
print jsonList


输出:



这段代码中jsonList中的所有tmpDict对象的值都是tmpDict最后的值。因为用这种形式加入容器的时候,(默认)加入的是tmpDict对象的引用。
所以如果要使用深度复制就需要调用copy.deepcopy(),将上述代码的第三行修改为:

jsonList.append(copy.deepcopy(tmpDict) #import copy

输出:



同时测试了数值与string

ls = []
a = "hello"
b = 1
ls.append(a)
ls.append(b)
a = "world"
b = 2
ls.append(a)
ls.append(b)
print ls

输出:


这时默认是深度复制,所以Python的逻辑还是很清楚的,对于复杂对象的默认复制是浅复制(传引用)










你可能感兴趣的:(python)