我想模拟python中的按值传递行为。换句话说,我想绝对确保我编写的函数不会修改用户提供的数据。
一种可能的方法是使用深层复制:
from copy import deepcopy
def f(data):
data = deepcopy(data)
#do stuff
是否有更有效或更Python的方式实现此目标,对传递的对象进行尽可能少的假设(例如.clone()方法)
编辑
我知道技术上python中的所有内容都是按值传递的。我对模拟行为很感兴趣,即确保我不会弄乱传递给函数的数据。我猜最一般的方法是使用其自身的克隆机制或Deepcopy来克隆所讨论的对象。
最佳答案
没有Python的方法可以做到这一点。
Python提供很少的设施来强制执行诸如私有(private)或只读数据之类的事情。 python的哲学是“我们都是成年人”:在这种情况下,这意味着“该功能不应更改数据”是规范的一部分,但未在代码中强制执行。
如果要复制数据,则可以找到最接近的解决方案。但是copy.deepcopy
除了效率低下外,还需要注意such as:
因此,仅当您知道要处理内置的Python类型或您自己的对象时(如果您可以通过定义__copy__
/__deepcopy__
特殊方法来自定义复制行为,而无需定义自己的clone()
方法,则建议您这样做) )。