import copy
def changeList(aList, index, value):
aList[index] = value
print('aList: ' + str(aList))
print('before copy.copy()')
listOfList = [['apple', 'banana', 'cherry'], [1, 4, 9, 16]]
changeList(listOfList[0], 0, 'test')
print('listOfList: {}'.format(listOfList))
print('--------------------------------')
print('after copy.copy()')
listOfList = [['apple', 'banana', 'cherry'], [1, 4, 9, 16]]
copyListOfList = copy.copy(listOfList)
changeList(copyListOfList, 0, ['test'])
print('listOfList: {}'.format(listOfList))
print('--------------------------------')
print('after copy.copy()')
listOfList = [['apple', 'banana', 'cherry'], [1, 4, 9, 16]]
copyListOfList = copy.copy(listOfList)
changeList(copyListOfList[0], 0, 'test')
print('listOfList: {}'.format(listOfList))
print('--------------------------------')
print('after copy.deepcopy()')
listOfList = [['apple', 'banana', 'cherry'], [1, 4, 9, 16]]
deepCopyListOfList = copy.deepcopy(listOfList)
changeList(deepCopyListOfList, 0, ['test'])
print('listOfList: {}'.format(listOfList))
print('--------------------------------')
print('after copy.deepcopy()')
listOfList = [['apple', 'banana', 'cherry'], [1, 4, 9, 16]]
deepCopyListOfList = copy.deepcopy(listOfList)
changeList(deepCopyListOfList[0], 0, 'test')
print('listOfList: {}'.format(listOfList))
print('--------------------------------')
這邊示範使用copy模組來複製list,由於我們可能有某個時機會將串列或類似的資料結構傳入函式,但是我們卻想複製一份list,在函式裡使用, 卻不想影響到原本的list,這時我們就需要copy模組,而copy.copy()只是shallow copy,copy.deepcopy()則是deep copy,也就是說, 所有裡面的任何以reference存在的變數,都會是新的一份copy,彼此之間不互相影響。
參照這個東西,在別的程式語言可能以address的名字存在,實際上都牽扯到程式語言原本的設計,我們只要記得變數到底存著值, 還是存著reference or address,我們就會知道自己的變數目前是什麼狀態。