imr*_*res 2 python immutability
我试图弄清楚以下是否在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
Run Code Online (Sandbox Code Playgroud)
我认为e是一个类,这意味着它是可变的(不可变类是否有意义?不能修改所有类吗?).由于f是一个类的实例,我猜它也是可变的,因为类是可变的.
由于数字在Python中是不可变的,因此g也应该是不可变的,因为它是一个数字,尽管是不合理的
最后我是一个函数,这意味着它应该是可变的?
我不太确定我理解不变性的概念.函数是不可变的意味着什么?对于一个不可变的类?
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; 您可以更改函数对象或类,类实例或列表的行为.(但不是一个元组.一旦制作了一个元组,只要它存在就会保持原样.)
| 归档时间: |
|
| 查看次数: |
1570 次 |
| 最近记录: |