1. 程式人生 > 程式設計 >Python 列表的清空方式

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是可變資料型別,L作為引數,函式內對L的改變,是可以反映到函式外的L中的,執行L.append(1),是在操作,函式外L所佔據的那塊記憶體,然後執行L =[],(函式內的L),想當於L指向了另外一個空間。所以,func(L),print L,輸出[1]。

其實函式的本意是將引數L指向的記憶體清空,用L=[],並不能清空L指向的記憶體

def func(L):
  L.append(1)                                 
  print L
  L[:]=[]
  #del L[:]
  #L = []
  print L
 
L=[]
func(L)
print L

輸出結果:

[1]
[]
[]

L[:]=[]:把L對應的記憶體清空

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的內容拷貝到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指向的記憶體完全不一致了。

類似於c++的引用賦值。

Python 賦值都是引用賦值,相當於使用指標來實現的另一個例證

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]]

跟我們想要的結果不一致

list.append(next),僅僅是把next的地址放到list 裡面

我們整個for 迴圈就使用了一個next,只是每次for迴圈,都在初始的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]]

36166472

36166472

解決辦法,每次for 迴圈都重新分配空間

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]]

15060360

15059712

以上這篇Python 列表的清空方式就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。