情況列表的操作:
del list[:]
list=
list[:]=
def func(l):
print l
#l[:]=
#del l[:]
l =
print l
l=func(l)
print l
輸出結果:
[1][1]
其實函式的本意是將引數l指向的記憶體清空,用l=,並不能清空l指向的記憶體
def func(l):
print l
l[:]=
#del l[:]
#l =
print l
l=func(l)
print l
輸出結果:
[1]l[:]=:把l對應的記憶體清空
def func(l):
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):
print l
print id(l)
#l[:]=
#del l[:]
l =
print id(l)
print l
l=func(l)
print l
輸出結果:
很明顯:通過賦值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)
print list
輸出結果:
[[9, 9], [9, 9], [9, 9], [9, 9], [9, 9], [9, 9], [9, 9], [9, 9], [9, 9], [9, 9]]
跟我們想要的結果不一致
我們整個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)
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]]
解決辦法,每次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)
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]]
python 清空列表的方法
1。大資料量的list,要進行區域性元素刪除,盡量避免用del隨機刪除,非常影響效能,如果刪除量很大,不如直接新建list,然後用下面的方法釋放清空舊list。2。對於一般性資料量超大的list,快速清空釋放記憶體,可直接用 a 來釋放。其中a為list。3。對於作為函式引數的list,用上面的方法...
python中如何清空陣列(列表)元素
python本身並沒有陣列型別,但是他的numpy庫中有陣列型別。通常情況下,python中的陣列指的是列表。第一種 示例 list 5 6,7 print list清空前 list 重新初始化列表 list print list清空後 list 第二種 使用clear 方法 clear 方法是用於...
python中如何清空陣列(列表)元素
python本身並沒有陣列型別,但是他的numpy庫中有陣列型別。通常情況下,python中的陣列指的是列表。第一種 示例 list 5 6,7 print list清空前 list 重新初始化列表 list print list清空後 list 第二種 使用clear 方法 clear 方法是用於...