Python 列表的清空方式
情況列表的操作:
del list[:]
list=[]
list[:]=[]
def func(L): L.append(1) print L #L[:]=[] #del L[:] L = [] print L L=[] func(L) print L
輸出結果:
[1]
[]
[1]
分析:L是可變數(shù)據(jù)類型,L作為參數(shù),函數(shù)內(nèi)對L的改變,是可以反映到函數(shù)外的L中的,執(zhí)行L.append(1),是在操作,函數(shù)外L所占據(jù)的那塊內(nèi)存,然后執(zhí)行L =[],(函數(shù)內(nèi)的L),想當于L指向了另外一個空間。所以,func(L),print L,輸出[1]。
其實函數(shù)的本意是將參數(shù)L指向的內(nèi)存清空,用L=[],并不能清空L指向的內(nèi)存
def func(L): L.append(1) print L L[:]=[] #del L[:] #L = [] print L L=[] func(L) print L
輸出結果:
[1] [] []
L[:]=[]:把L對應的內(nèi)存清空
def func(L): L.append(1) print L #L[:]=[] del L[:] #L = [] print L L=[] func(L) print L
分析:
del L[:] 的效果跟L[:]=[]的效果是一樣的。
python 賦值,往往是通過指針完成的,a=b,只是讓a指向了b,并未把b的內(nèi)容拷貝到a
def func(L): L.append(1) print L print id(L) #L[:]=[] #del L[:] L = [] print id(L) print L L=[] func(L) print L
輸出結果:
31460240
31460168
很明顯:通過賦值L=[]后,L指向的內(nèi)存完全不一致了。
類似于c++的引用賦值。
Python 賦值都是引用賦值,相當于使用指針來實現(xiàn)的另一個例證
list =[] next = [None,None] for i in range(10): next[0] = i #print id(i) #print id(next[0]) next[1] = i #print id(next) list.append(next) print list
輸出結果:
[[9, 9], [9, 9], [9, 9], [9, 9], [9, 9], [9, 9], [9, 9], [9, 9], [9, 9], [9, 9]]
跟我們想要的結果不一致
list.append(next),僅僅是把next的地址放到list 里面
我們整個for 循環(huán)就使用了一個next,只是每次for循環(huán),都在初始的next上進行操作,本次的操作會覆蓋上次的結果
list =[] next = [None,None] for i in range(10): next[0] = i #print id(i) #print id(next[0]) next[1] = i #print id(next) list.append(next) print list print id(list[0]) print id(list[1])
輸出結果:
[[9, 9], [9, 9], [9, 9], [9, 9], [9, 9], [9, 9], [9, 9], [9, 9], [9, 9], [9, 9]]
36166472
36166472
解決辦法,每次for 循環(huán)都重新分配空間
list =[] for i in range(10): next = [None,None] next[0] = i #print id(i) #print id(next[0]) next[1] = i #print id(next) list.append(next) print list print id(list[0]) print id(list[1])
輸出結果:
[[0, 0], [1, 1], [2, 2], [3, 3], [4, 4], [5, 5], [6, 6], [7, 7], [8, 8], [9, 9]]
15060360
15059712
以上這篇Python 列表的清空方式就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
使用Flask開發(fā)RESTful?API的方法實現(xiàn)
RESTful?API是一種基于REST架構風格設計的Web服務接口,本文主要介紹了使用Flask開發(fā)RESTful?API的方法實現(xiàn),具有一定的參考價值,感興趣的可以了解一下2023-11-11selenium+headless chrome爬蟲的實現(xiàn)示例
這篇文章主要介紹了selenium+headless chrome爬蟲的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-01-01Python實現(xiàn)多態(tài)、協(xié)議和鴨子類型的代碼詳解
問起面向?qū)ο蟮娜筇匦?,幾乎每個人都能對答如流:封裝、繼承、多態(tài)。今天我們就要來說一說Python實現(xiàn)多態(tài)、協(xié)議和鴨子類型,感興趣的朋友跟隨小編一起看看吧2019-05-05Pandas數(shù)據(jù)合并的兩種實現(xiàn)方法
本文主要介紹了Pandas數(shù)據(jù)合并的兩種實現(xiàn)方法,DataFrame數(shù)據(jù)合并主要使用merge()方法和concat()方法,具有一定的參考價值,感興趣的可以了解一下2023-11-11