gpt4 book ai didi

python - 在 python 中模拟传值行为

转载 作者:IT老高 更新时间:2023-10-28 20:24:11 26 4
gpt4 key购买 nike

我想模拟 python 中的按值传递行为。换句话说,我想绝对确保我编写的函数不会修改用户提供的数据。

一种可能的方法是使用深拷贝:

from copy import deepcopy
def f(data):
data = deepcopy(data)
#do stuff

有没有更有效或更pythonic的方法来实现这个目标,对传递的对象做尽可能少的假设(例如.clone()方法)

编辑

我知道从技术上讲,python 中的所有内容都是按值传递的。我对模拟行为很感兴趣,即确保我不会弄乱传递给函数的数据。我想最通用的方法是使用自己的克隆机制或使用 deepcopy 克隆有问题的对象。

最佳答案

没有pythonic的方法可以做到这一点。

Python 为强制诸如私有(private)或只读数据之类的事物提供了很少的工具。 pythonic 的哲学是“我们都是同意的成年人”:在这种情况下,这意味着“函数不应更改数据”是规范的一部分,但未在代码中强制执行。


如果您想制作数据的副本,您可以获得的最接近的解决方案就是您的解决方案。但是copy.deepcopy,除了效率低下,还有一些注意事项such as :

Because deep copy copies everything it may copy too much, e.g., administrative data structures that should be shared even between copies.

[...]

This module does not copy types like module, method, stack trace, stack frame, file, socket, window, array, or any similar types.

所以我只推荐它,如果你知道你正在处理内置的 Python 类型或你自己的对象(你可以通过定义 __copy__/ 来自定义复制行为__deepcopy__ 特殊方法,不需要自己定义clone()方法)。

关于python - 在 python 中模拟传值行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/845110/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com