Python物件例項化中變數的互相影響

2021-10-11 22:56:49 字數 1274 閱讀 4317

程式設計過程中發現了乙個問題,問題如下:

class myclass(object):

def __init__(self,lis=):

self.num = 0

self.lis = lis

classinit1 = myclass()

classinit1.num = 1

classinit2 = myclass()

classinit2.num = 2

例項化了自定義類myclass的兩個例項ci1 ci2,例項擁有兩個自己的變數num 和 lis

對例項各自的變數賦值取值發現例項變數lis互相影響。

通過檢視id,發現兩個變數中的lis是在同一記憶體位址。

修改類定義的方式,上述問題不再出現。

或者,在例項化過程**入空的list,如下:

推測原因為python內的變數共享機制,類似的dictionary物件、list物件包括字串物件之間大多都是互相引用,因此導致了互相影響。

通過傳入,相當於新建了乙個list傳入,因此不再通過引用去使用之前所存在的。

變數的例項化

乙個類的物件叫例項,得到乙個物件就叫做例項化。有些變數在定義的時候要加上new進行例項化,有些變數在定義的時候不加new進行例項化,例如 dim encard asnew cardinfoentity 與 dim dt as datatable,這是為什麼呢?其實加new就是對其變數進行例項化,為其...

python中類變數和例項變數 之例項變數

class test def f self,name self.name name def f1 self print self.name 例項變數為例項物件特有資料 x1 test 例項化test類,建立例項物件x1 x2 test 例項化test類,建立例項物件x2 設定例項屬性 方式1 x1....

python中的物件 Python中的變數 物件

由於沒時間系統學習下python 只能見乙個問題 乙個問題了 一 初級 物件 關於python中的資料型別,今天重新認識了下。參考 首先,python中,物件才有型別,變數是沒有型別的,它只是物件的 引用 其次,python中物件被分為兩類 可更改物件和不可更改物件 包括numbers,string...