python - 类变量根据其类型而表现不同(共享或不共享)

标签 python

用作类变量时,数字和列表的行为不同:数字不与实例共享,而列表变量则可以。 (在相同条件下)有人可以解释一下发生了什么吗?

Ps:已经问过这个问题(解释不太清楚),它被认为是关于一般类变量的问题的重复。我问为什么在相同条件下数字和列表类变量之间存在差异。

class test_class:
    number = 0
    list = [8]
    def addnum(self, num):
        self.number = num
    def addlist(self, list):
        self.list.append(list)
object = test_class()
object.addnum(5)
object.addlist(6)

print(test_class.number)
print(object.number)

print(test_class.list)
print(object.list)

打印:

0
5         (number variable is not shared)
[8, 6]    (list was shared)
[8, 6]

预期:

0
5
[8]
[8, 6] (list gets appended without affecting the original)

最佳答案

类变量应该被视为一种全局变量:存储整个类的全局状态的地方(很少需要),以及定义共享常量的地方(非常常见)。如果您希望实例的数据因实例而异,请将它们设置在 __init__() 中。方法,而不是在类级别。

就您观察到的差异而言,在一种情况下,您正在为属性分配一个值,而在另一种情况下,您正在更改已存储在属性中的值。核心问题是赋值变异之间的区别。

关于python - 类变量根据其类型而表现不同(共享或不共享),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56052270/

相关文章:

python - 从 C 到 Python 写入 TCP 套接字

python - PyTorch:如何在迁移学习教程中计算均值和标准差?

python - 生成 Joomla 页面的脚本

python - 这是查找字符串中最长单词(复数)的有效方法吗?

IE 中的 Python webdriver 为所有 find_elements 返回 None

python - Keras 逻辑回归在第一个纪元返回 nan

python - Spyder 的 DataFrame 查看器中的背景颜色和列最小/最大选项被禁用

python - 将 python 函数作为 bash 命令运行

python - 将 json 数据集转换为 pandas 数据框

python - 如何在 Django Models 中存储密文