1. 程式人生 > >python的深淺copy,input

python的深淺copy,input

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來講,是從鍵盤輸入的資料,在這個裡面的資料,都是字串。你要想轉化為別的資料型別可以使用強制轉換。