python 类变量是列表或字典的时候被所有实例共享吗?反之不共享?这是python的特性吗?

查看:86
本文介绍了python 类变量是列表或字典的时候被所有实例共享吗?反之不共享?这是python的特性吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

如下:n和n_list是两个不同类型的类变量,在被某个实例修改后,却出现两种不同的结果。这块有点蒙圈儿了。。

# -*- coding:utf-8 -*-
class test_():
    n = '123'
    n_list = ['123']
    def __init__(self, name, age):
        self.name = name
        self.age = age

t1 = test_('aaa', 'bbb')
t2 = test_('111', '222')

t1.n = '一二三'
print(t1.n)   #一二三
print(t2.n)   #123
print(test_.n) #123

t1.n_list[0] = '壹贰叁'
print(t1.n_list)   #['壹贰叁']
print(t2.n_list)   #['壹贰叁']
print(test_.n_list)  #['壹贰叁']

解决方案

个人觉得说是引用与值的区别是不准确的。首先你确实需要先搞清楚python的可变对象和不可变对象的区别。
但是这里的实际情况更复杂一些,你可以试下print:

print(t1.__dict__, test_.__dict__)
print(t1.n, t1.__class__.n)

如果想要彻底搞清楚这些,你去搜下python对象查找属性的具体顺序。

这篇关于python 类变量是列表或字典的时候被所有实例共享吗?反之不共享?这是python的特性吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆