-
1 # 果蔬烘乾機
-
2 # 使用者72565784349
list.clear()表示將list清空,id不變。
list=[]表示將list賦值成一個新的空列表,id改變,原列表被回收。
-
3 # 李老師tome
python中對於list的清空,這兩種雖然結果一樣,但是在對於記憶體操作是不一樣的。
clear()會清空list所在位置的內容,但不會改變記憶體地址的位置。
list=[]會重新為list申請一個新的記憶體地址。
以下我用兩段程式碼,就可以清晰地瞭解這兩種方法的不同之處:
-
4 # 科技灣區
為了更加清楚地說明這個問題,不妨稍作拓展,先說一下Python中的變數。Python中任何變數都是以引用的方式定義和使用的,假如有定義list=[1,2,3],則是定義了一個指向列表物件的引用。接下來回到問題中來分析list.clear()和list=[]的不同。首先明顯的不同體現在具體操作上:list.clear()在清除了list引用的列表物件之後,list仍舊指向該列表物件;而list=[]會建立一個新的列表物件並使list變數指向該物件而不再指向之前引用的列表物件,之前引用的列表物件如果沒有被其它變數引用的話就等待垃圾器對它的回收了。說到這裡很多朋友應該能想到由此造成的另一個不同,對,那就是效能上的不同。如果在大型程式中頻繁使用後者去獲得一個空的列表物件,勢必會造成記憶體使用的上的低效,並且無謂地拉高垃圾回收的頻次和工作量,進而造成整體效能的下降。最後要說的一個不同比較隱晦,那就是在多執行緒執行模式下使用list=[]可能會造成各個執行緒之間資料的不一致,而另一種不會,因為每執行一次list=[],list就會發生變化指向一個新構造的列表物件。這樣造成的bug是很難被發現的。
-
5 # 來自Z時代
python語言中,清空list(列表)有很多方法,常用的有以下4種:
1. 用clear()方法程式碼如下:
結果如下:
2. 直接初始化列表:初始化列表,即:list = [],變成大小為0的列表程式碼如下:
結果如下:
程式碼如下:
結果如下:
4. 使用 *=0程式碼如下:
結果如下:
list.clear()和list =[ ]的區別二者結果一樣,但涉及到記憶體的問題。
list.clear()會清空列表裡的元素,但不會清除list的記憶體位置;list = []則直接重新分配一個記憶體地址。用id()方法可以輕鬆看出來,程式碼如下:
list.clear()
記憶體地址是不變的!
list=[]
記憶體地址改變,重新分配了。
希望可以解決你的疑問。
-
6 # 花無序
python中一切皆物件
物件由3部分組成;變數、記憶體地址、值。clear()方法是把本身的值清空了,記憶體地址沒有變化。
list[]是變數指向了空列表,也就是指向了值為空的記憶體地址。
回覆列表
list.clear() 和list=[]都可以用來清空列表, 但是list=[]他是重新初始化列表 : 初始化該範圍內的列表, 初始化列表沒有值, 即大小為0的列表.
在實際使用中, 列表的初始化清空和使用clear()清空, 二者的區別就在於, 涉及到記憶體空間的引用問題, 在面對有列表的複用問題時需要注意, 最好使用初始化清空.
你可以試試如下程式碼:
first = []last = []lists_more = [1, 2, 3, 4, 5, 6]for i in lists_more: first.append(i) last.append(first) first.clear()print(last)>>>[]
first = []last = []lists_more = [1, 2, 3, 4, 5, 6]for i in lists_more: first.append(i) last.append(first) first = []print(last)>>>[[1], [2], [3], [4], [5], [6]]