在python类中,我有一些方法:
def method0(self,x,y,z):
s=x
s=method1(self,s,y)
s=method2(self,s,z)
return s
当我运行上述代码(我不希望x被更改)时,x会随着s而更改(为什么?
但当我使用复制模块x时,它不会改变:
def method0(self,x,y,z):
s=copy.copy(x)
s=method1(self,s,y)
s=method2(self,s,z)
return s
如何编写方法0,使x不被更改
Tags:
完全按照您的方式—在修改值之前复制值。Python没有C++之类的稳定性概念(无论如何都不是太大),所以没有办法强制你只在参数上使用非突变操作。p>
而且,也没有办法将参数声明为作为副本传递,而不是作为引用传递
如果您知道自己的领域(如矩阵),您可以尝试&;通过在装饰器中复制参数,使这种方法更具声明性
防止x被更改的另一种方法是确保任何函数都不会更改其参数。您的问题源于method1或method2正在更改其参数这一事实。但是您也从这些方法返回值。修复这些方法,使其不改变传递给它们的矩阵,而只生成新的矩阵,那么问题就解决了
相关问题 更多 >
编程相关推荐