其中哪些在 Python 中是不可变的?

2024-04-30

我试图弄清楚以下内容在 Sage 中是否是不可变的(它是基于 Python 构建的,所以我相信如果它在 python 中是不可变的,我相信在大多数情况下它在 Sage 中也是不可变的)

下面是对象 e、f、g、i

class e: pass
f = e()
g = pi # (g's "type" in Sage is symbolic expression. It's supposed to be 3.1415....etc)
i = lambda x: x*x

我认为 e 是一个类,这意味着它是可变的(不可变类有意义吗?不能修改所有类吗?)。由于 f 是类的实例,我猜测它也是可变的,因为类是可变的。

由于数字在 Python 中是不可变的,因此 g 也应该是不可变的,因为它是一个数字,尽管它是无理数

最后 i 是一个函数,这意味着它应该是可变的?

我不太确定我是否理解不变性的概念。函数不可变意味着什么?一个类是不可变的吗?


e是可变的。例如,您可以在类上添加一个新方法:e.foo = lambda self,x: x.

f是可变的。例如,您可以向此类实例添加一个新字段:f.x = 99.

g是不可变的。你无法改变它的任何事情。

i不是一成不变的。你可以对它做各种邪恶的事情:i.func_code = (lambda x: 123).func_code之后i(10)将会是 123 而不是 100。(你也可以对它做更合理的事情。之后i.__doc__ = "This function returns the square of its argument."你会得到更有帮助的结果help(i).)

如果您可以对对象执行某些操作来改变其未来可能的行为,则该对象是可变的。你无法改变的行为10;您可以更改函数对象、类、类实例或列表的行为。 (但不是元组。元组一旦创建,只要存在,它就会保持原样。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

其中哪些在 Python 中是不可变的? 的相关文章

随机推荐