1. 程式人生 > >深淺拷貝的一些理解和練習

深淺拷貝的一些理解和練習

imp () invalid value ces pre als pen deepcopy

lst=[1,11,10,2,21] lst [1, 11, 10, 2, 21] lst.sort(key=int) lst [1, 2, 10, 11, 21] lst.sort(key=str) lst [1, 10, 11, 2, 21] lst[0] 1 lst[1] 10 #(key=str),用key作比較,下面相當於內置的函數 #for x in len(lst): # if str(x[i])>int(x[i+1]) # pass lst.append(‘1.5‘) lst [1, 1.5, 2, 10, 11, ‘1.5‘, ‘1.5‘, ‘1.5‘] lst.sort() --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-23-b7de4ff5ffae> in <module> ----> 1 lst.sort() TypeError: ‘<‘ not supported between instances of ‘str‘ and ‘int‘ lst.pop() ‘1.5‘ lst [1, 1.5, 2, 10, 11, ‘1.5‘, ‘1.5‘] lst.sort() --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-26-b7de4ff5ffae> in <module> ----> 1 lst.sort() TypeError: ‘<‘ not supported between instances of ‘str‘ and ‘int‘ lst.sort(key=str) lst [1, 1.5, ‘1.5‘, ‘1.5‘, 10, 11, 2] lst.sort(key=int) --------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-29-67bb97e53cd1> in <module> ----> 1 lst.sort(key=int) ValueError: invalid literal for int() with base 10: ‘1.5‘ lst.sort(key=float) lst [1, 1.5, ‘1.5‘, ‘1.5‘, 2, 10, 11] lst0=list(range(4)) lst2=list(range(4)) #內容雖然一樣,但是地址是不一樣的 print(lst0==lst2) lst1=lst0 #地址復制 lst1[2]=10 print(lst0) print(lst1) print(lst2) True [0, 1, 10, 3] [0, 1, 10, 3] [0, 1, 2, 3] lst0=[1,[2,3,4],5] lst5=lst0.copy() lst0 [1, [2, 3, 4], 5] lst5 [1, [2, 3, 4], 5] lst0==lst5 True lst0[2]=5 lst0[1][1]=20 lst0[1][0]=30 lst0 #淺拷貝;[30,20,4]整體是一個地址,改一個,另一個引用同一個地址也會變,前已發動全身,故([1,2,3]*5)要非常謹慎 [1, [30, 20, 4], 5] lst5 [1, [30, 20, 4], 5] id(lst0) 4572609928 id(lst5)#內容完全一致,但是地址 4573317384 lst0=[1,[2,3,4],5]#深拷貝,將內容完全復制,[2,3,4]是一個地址,但是復制內容,生成另一個地址,復制內容 from copy import deepcopy lst5=deepcopy(lst0) lst0==lst5 True lst0[2]=50 lst0==lst5 False #lst=[1,2,3] #lst1=lst #同一個對象,將一個賦值給另一個 #lst2=lst.copy() #內容相同,不同對象,遇到引用類型不復制對象,復制地址 #lst3=copy.deepcopy(lst)#內容相同,不同對象遇到引用類型也會復制出不同的對象 ?

深淺拷貝的一些理解和練習