Pythonで値渡しの動作をエミュレートしたいと思います。言い換えれば、私が書いた関数がユーザー提供のデータを変更しないことを絶対に確認したいと思います。
考えられる1つの方法は、ディープコピーを使用することです。
from copy import deepcopy
def f(data):
data = deepcopy(data)
#do stuff
この目標を達成するためのより効率的またはよりPython的な方法があり、渡されるオブジェクトについて可能な限り少ない仮定を行います(.clone()メソッドなど)
編集
技術的には、Pythonのすべてが値によって渡されることを認識しています。私はその振る舞いをエミュレートすることに興味がありました。つまり、関数に渡されたデータを台無しにしないようにすることです。最も一般的な方法は、問題のオブジェクトを独自のクローンメカニズムまたはディープコピーを使用してクローンすることだと思います。