Copy Module

使用copy模組

有了reference這種東西,我們就希望對reference有更好的操控。 我們來看看以下的範例:

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,我們就會知道自己的變數目前是什麼狀態。

Last updated

Was this helpful?