非内置类型实例如何在Python中保持不可变?

问题描述 投票:0回答:1

如果我尝试跑步

import numpy as np

type(np.dtype).moo = 7

然后我明白了

TypeError: cannot set 'moo' attribute of immutable type 'numpy._DTypeMeta'

我找不到解释。

numpy._DTypeMeta
是一个
type
实例,所以这应该大致相当于

type.__setattr__(numpy._DTypeMeta, "moo", 7)

那么

type.__setattr__
中发生了什么检测到
numpy._DTypeMeta
应该是不可变的?

我可以想象像

float
这样的不可变内置函数可能存储在逻辑内存中的特定位置,并且
type.__setattr__
可以检查这一点,但 numpy 不是内置的。

python immutability built-in
1个回答
0
投票

这是一个有趣的问题,我很想看到对 C API 有更好了解的人的回答。

这是我的快速不完整(并且可能不正确)的看法:

© www.soinside.com 2019 - 2024. All rights reserved.