python的深淺copy,input
阿新 • • 發佈:2018-12-15
python的賦值
對於python來講,Python的賦值,如果是同樣的資料元素,那它的賦值就僅僅只是變數的名稱指向同一個記憶體地址。來個例子:
a = 1;
b = 1;
print( "a={},b = {}".format(a,b)) #a=1,b = 1
print("a的記憶體地址{},b的記憶體地址{}".format(id(a), id(b))) # a的記憶體地址1881166624,b的記憶體地址1881166624
l1 = [9, 8 , 7, 'love']
l2 = l1
l1[0] = 6
print(l2)
print(l1)
淺拷貝copy
對於淺copy來說,就是當一個列表存在列表的巢狀(也就是多層),那麼淺拷貝只是將第一層資料元素重新建立的是新的記憶體地址,而從第二層開始,依然還是指向的都是同一個記憶體地址,也就是說,從第二層以及更深的層數來說,資料元素依然不變,保持一致性。你來仔細看看下面這個例子,你就明白了。
l1 = [9, 8, 7, ['i', 'love', 'you']] l2 = l1.copy() print(l2, id(l1)) #[9, 8, 7, ['i', 'love', 'you']] 2489866260360 print(l1, id(l2)) #[9, 8, 7, ['i', 'love', 'you']] 2489866276424 l1[1] = 5 print(l2, id(l1)) #[9, 8, 7, ['i', 'love', 'you']] 2489866260360 print(l1, id(l2)) #[9, 5, 7, ['i', 'love', 'you']] 2489866276424 l1[3][0] = 'me' print(l1,id(l1[3])) #[9, 5, 7, ['me', 'love', 'you']] 2489866276680 print(l2,id(l2[3])) #[9, 8, 7, ['me', 'love', 'you']] 2489866276680
深拷貝copy
對於深copy來說,兩個是完全獨立的,改變任意一個的任何元素(無論多少層),另一個絕對不改變。
import copy l1 = [9, 8, 7, ['i', 'love', 'you']] l2 = copy.deepcopy(l1) print(l2, id(l1)) #[9, 8, 7, ['i', 'love', 'you']] 2708854705992 print(l1, id(l2)) #[9, 8, 7, ['i', 'love', 'you']] 2708854705672 l1[1] = 5 print(l2, id(l1)) #[9, 8, 7, ['i', 'love', 'you']] 2708854705992 print(l1, id(l2)) #[9, 5, 7, ['i', 'love', 'you']] 2708854705672 l1[3][0] = 'me' print(l1,id(l1[3])) #[9, 5, 7, ['me', 'love', 'you']] 2708854748360 print(l2,id(l2[3])) #[9, 8, 7, ['i', 'love', 'you']] 2708854748936
input
對於input來講,是從鍵盤輸入的資料,在這個裡面的資料,都是字串。你要想轉化為別的資料型別可以使用強制轉換。