深淺拷貝的一些理解和練習
阿新 • • 發佈:2019-04-03
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)#內容相同,不同對象遇到引用類型也會復制出不同的對象
?
深淺拷貝的一些理解和練習