python物件引用引起的問題

2021-07-24 17:03:58 字數 685 閱讀 1733

我們都知道python中一切皆是物件,這句話我記得很清楚,但是平時用起來確也容易混淆。

今天遇到乙個bug,大概情況是這樣:

a = [1,2,3]

b = [11,22,33]

c = [a,b]

print c

# c = [[1, 2, 3], [11, 22, 33]]

我在乙個檔案中修改了a,而在另乙個列表中讀c,結果發現c總是不對…..檢查好久才想起來了,c中存貯的a應該是a的引用,也就是python中常見的物件淺拷貝。測試一下:

a[0] = 5

print c

# c = [[5, 2, 3], [11, 22, 33]]

以後一定要注意啊,特別是多處讀寫的敵方,很容易忽視!

如果在c中獨自保留a的副本,則應該使用copy。

a = [1,2,3]

b = [11,22,33]

np.copy(a)

c = [np.copy(a), b]

print c

a[0] = 5

print c

#[array([1, 2, 3]), [11, 22, 33]]

#[array([1, 2, 3]), [11, 22, 33]]

python物件引用的問題

python 動態的引用物件會出現一些比較奇怪的現象。如result listdict result dict foriinrange len result list ifi self.n break 執行結果是list中所以的元素都是最後dict中的值 如果想得到正確的結果,則需要改為 resul...

python中import的引用機制引起的坑

最近在擼scikit learn的 想載入點seaborn的資料訓練模型,簡單的一句seaborn.load dataset 都編譯通不過。import matplotlib.pyplot as plt import numpy as np import seaborn as sns from sk...

python的物件引用

首先,我們來了解一下python的基礎概念 1.python在heap中分配的物件分成兩類 可變物件和不可變物件。所謂可變物件是指,物件的內容是可變的,例如list。而不可變的物件則相反,表示其內容不可變。不可變物件 int,string,float,tuple 可變物件 list,dictiona...