就如下述代码所示,我新建两个类,修改其中一个,为什么list a就受到了test1的影响,而int
b却没有收到影响???
class test :
a = []
b = 0
def main():
#实例化两个类,两个之间没有关系。
test1 =test()
test2 =test()
#这里我只对test1进行了操作
test1.a.append('123')
test1.b =567
#期望这里的test2应该是没有[]和0
print(test2.a)
print(test2.b)
if __name__ == "__main__":
main()
这是什么原因???我看了基础语法教程也没说到这块有什么特殊的地方啊?
这里涉及两个 Python 知识点:
这样的写法,属性是类级共享的:
字典、列表等是容器类型;添加或删除元素操作,是操作容器内的元素
这两点合在一起就是你描述的问题。
关于类级共享属性,当实例化一个类之后,这个实例还是和类使用共享的属性:
只有当实例对属性赋值之后,这个属性的作用范围就只在这个实例内部(相当于在实例内重新创建了一个该属性)。