列表中的陷阱

2022-09-16 00:15:24 字數 704 閱讀 7267

列表是python中常用的一種資料結構,能夠存放任意的其他資料型別,int、str、list 、tuple等,但是最近發現了乙個問題,**如下

data = 

buff = dict()

for i in range(5):

buff['d'] = i

print(data)

原本以為列印的結果會是

[,,,,]

但是最終的結果為

[,,,,]

最後發現其實當我們使用列表儲存資料的時候,只是把資料的記憶體位址給存入列表中了而不是資料本身,所以上面的**就不難理解我們只是在data列表中存了5個buff的記憶體位址,而且這5個記憶體位址是指向同乙個資料的,當執行到最後乙個迴圈的時候buff裡面的資料就變為,所以data最後的結果就是5個相同的內容。

弄清楚了上面的問題,我們可以做以下更改來實現我們的目的

data = 

buff = dict()

for i in range(5):

buff['d'] = i

buff = dict()

print(data)

最終的結果如下

[,,,,],

總結:列表並不是直接存放資料物件本身,而是存放資料物件的記憶體位址,如果記憶體位址對應的內容被修改了那麼列表也會被更改掉。

列表中的陷阱

列表是python中常用的一種資料結構,能夠存放任意的其他資料型別,int str list tuple等,但是最近發現了乙個問題,如下 data buff dict for i in range 5 buff d i print data 原本以為列印的結果會是 但是最終的結果為 最後發現其實當我...

singleton中的陷阱

單件模式應該是設計模式中運用得最多的模式之一,對於全域性性的復用性的物件我們通常會採用單件模式,正是因為單件這種頻繁運用的看似簡單的模式前段時間在我們的專案中卻引發了乙個致命性的崩潰bug,因此在這裡總結一下,希望能給大家有所幫助。所謂單件模式就是在整個程序執行期間只需要例項化一次為所有執行執行緒公...

Method Swizzling中的陷阱

這篇文章不是介紹什麼是方法交換,這類文章很多,如果你不知道什麼是方法交換可以看這篇文章 method swizzling 方法交換是很危險的東西,會產生一些未知的錯誤,最近在使用方法交換時就遇到了這樣的問題,在我交換了乙個系統方法後,在呼叫這個方法時會在我交換的方法中迴圈無法跳出。最終我找到了問題的...