標籤:iter pytho int 運算 老男孩 記憶體位址 儲存 機構 好的
需要理解資料的預存程序:
資料在磁碟中的儲存,是分兩個地區的,一個是資料區塊,存放資料,一個是索引標記。資料的讀取是通過索引標記來找到資料區塊的位置,從而找到資料。
1,先看賦值運算。
l1 = [1,2,3,[‘barry‘,‘alex‘]]l2 = l1l1[0] = 111print(l1) # [111, 2, 3, [‘barry‘, ‘alex‘]]print(l2) # [111, 2, 3, [‘barry‘, ‘alex‘]]l1[3][0] = ‘wusir‘print(l1) # [111, 2, 3, [‘wusir‘, ‘alex‘]]print(l2) # [111, 2, 3, [‘wusir‘, ‘alex‘]]
對於賦值運算來說,l1與l2指向的是同一個記憶體位址,所以他們是完全一樣的。
2,淺拷貝copy。
l1 = [1,2,3,[‘barry‘,‘alex‘]]l2 = l1.copy()print(l1,id(l1)) # [1, 2, 3, [‘barry‘, ‘alex‘]] 2380296895816print(l2,id(l2)) # [1, 2, 3, [‘barry‘, ‘alex‘]] 2380296895048l1[1] = 222print(l1,id(l1)) # [1, 222, 3, [‘barry‘, ‘alex‘]] 2593038941128print(l2,id(l2)) # [1, 2, 3, [‘barry‘, ‘alex‘]] 2593038941896 l1[3][0] = ‘wusir‘print(l1,id(l1[3])) # [1, 2, 3, [‘wusir‘, ‘alex‘]] 1732315659016print(l2,id(l2[3])) # [1, 2, 3, [‘wusir‘, ‘alex‘]] 1732315659016
對於淺copy來說,第一層建立的是新的記憶體位址,而從第二層開始,指向的都是同一個記憶體位址,所以,對於第二層以及更深的層數來說,保持一致性。
3,深拷貝deepcopy。
import copyl1 = [1,2,3,[‘barry‘,‘alex‘]]l2 = copy.deepcopy(l1)print(l1,id(l1)) # [1, 2, 3, [‘barry‘, ‘alex‘]] 2915377167816print(l2,id(l2)) # [1, 2, 3, [‘barry‘, ‘alex‘]] 2915377167048l1[1] = 222print(l1,id(l1)) # [1, 222, 3, [‘barry‘, ‘alex‘]] 2915377167816print(l2,id(l2)) # [1, 2, 3, [‘barry‘, ‘alex‘]] 2915377167048l1[3][0] = ‘wusir‘print(l1,id(l1[3])) # [1, 222, 3, [‘wusir‘, ‘alex‘]] 2915377167240print(l2,id(l2[3])) # [1, 2, 3, [‘barry‘, ‘alex‘]] 2915377167304
對於深copy來說,兩個是完全獨立的,改變任意一個的任何元素(無論多少層),另一個絕對不改變
4、其他動作
for迴圈:使用者按照順序迴圈可迭代對象的內容。
msg = ‘老男孩python是全國範圍內最好的python培訓機構‘for item in msg: print(item)li = [‘alex‘,‘銀角‘,‘女神‘,‘egon‘,‘太白‘]for i in li: print(i)dic = {‘name‘:‘太白‘,‘age‘:18,‘sex‘:‘man‘}for k,v in dic.items(): print(k,v)
enumerate:枚舉,對於一個可迭代的(iterable)/可遍曆的對象(如列表、字串),enumerate將其組成一個索引序列,利用它可以同時獲得索引和值。
li = [‘alex‘,‘銀角‘,‘女神‘,‘egon‘,‘太白‘]for i in enumerate(li): print(i)for index,name in enumerate(li,1): print(index,name)for index, name in enumerate(li, 100): # 起始位置預設是0,可更改 print(index, name)
range:指定範圍,產生指定數字。
for i in range(1,10): print(i)for i in range(1,10,2): # 步長 print(i)for i in range(10,1,-2): # 反向步長 print(i)
參考連結:http://www.cnblogs.com/jin-xin/articles/7562422.html
Python-深淺copy