python中 列表(list)的copy辦法
1.先解決一個報錯。
a =[1,2,3]
b =a.copy
print( b)
報錯:
AttributeError: 'builtin_function_or_method' object has no attribute 'copy'
這是因為a.copy語句并沒有執行copy函數,而是把a.copy這個函數賦值給了b。執行如下語句:
c =b()
print( c)
#c =[1,2,3]
這個錯誤太經典了,核心就是要記住,所有的函數的執行都需要()指示。
2.根據help( list)的指示,copy函數,將生成一個淺復制。具體的表現如下:
初始化:
original_list =[1, 2, [3, 4]]
shallow_list =original.copy()
>>>shallow_list
>>>[1, 2, [3, 4]]#看起來一模一樣
分別進行兩次,賦值,檢查另一個對象:
>>>shallow_list[0] =100
>>>original_list
>>>[1, 2, [3, 4]] #沒有變化
我們更改淺拷貝的第二層元素的時候:
>>> shallow_list[2][3] =300
>>>orignial_list
>>>[1, 2, [300, 4]]#我們沒有操作過original_list,但是它改變了
網上通常的講法說是因為copy傳遞的是地址,而不是內容。但是我感覺沒這么簡單。如果傳遞的是內容,那么修改第一次的時候,original_list就應該改變了。但是并沒有,機制還是有待發掘的,留坑。(優點應該是占內存少)
3。深復制,沒有理解困難。就是完全復制到另一塊內存上的空間。兩者之間不會有任何影響。
4.其他list 的基本函數( help( list)),留坑