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的逻辑还是很清楚的,对于复杂对象的默认复制是浅复制(传引用)