簡體   English   中英

類變量v / s python中的實例變量

[英]class variables v/s instance variables in python

根據我以前對python oop的了解,我知道python對所有類實例都有一個類變量的單個副本;它意味着:

>>> class A: foo = []
>>> a, b = A(), A()
>>> a.foo.append(5)
>>> b.foo
[5]

但是當我這樣做時:

>>> class A():
    cl_var=5
    def __init__(self,b):
        self.obj_var=b


>>> a1,a2=A(2),A(5)
>>> a1.cl_var
5
>>> a1.cl_var=23
>>> a2.cl_var
5 

為什么a2.cl_var沒有變成23?

分配給a1.cl_var重新綁定a1關聯的cl_var 這不會影響a2.cl_var

>>> id(a1.cl_var), id(a2.cl_var)
(11395416, 11395416)

如您所見, a1.cl_vara2.cl_var是同一個對象。

但是,當您分配給a1.cl_var ,它們將成為不同的對象:

>>> a1.cl_var=23
>>> id(a1.cl_var), id(a2.cl_var)
(11395200, 11395416)

這在a / b示例中不會發生,因為您通過引用修改了 foo 你不重新綁定(即分配)它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM