【发布时间】:2020-02-20 08:26:26
【问题描述】:
假设我们必须得到一些值并从函数中改变它。
方式 1
def change_b(obj):
obj['b'] = 4
result = {'a': 1, 'b': 2}
change_b(obj=result)
print(result)
如您所知,函数change_b() 直接在函数中更改result['b'] 的值。
方式 2
from copy import deepcopy
def change_b(obj):
temp = deepcopy(obj)
temp['b'] = 4
return temp
result = {'a': 1, 'b': 2}
result = change_b(obj=result)
print(result)
但是Way-2将对象复制到新对象并替换新对象的值。
所以,原始对象不会影响任何东西。 (而且,没有副作用)
也许Way-2更安全,因为它不会改变原始对象。
我想知道哪种方式更通用和pythonic?
谢谢。
【问题讨论】:
-
为什么要做深拷贝而不是浅拷贝?
-
@wjandrea 这只是一个例子。深拷贝或浅拷贝都不重要。
-
pandas中的一些函数可以双向工作。他们创建新数据,或者如果您添加inplace=True,他们可以更新现有数据。这是个好方法。 -
两种方式都可以。最糟糕的是当函数没有获取参数但使用
global更改数据时。
标签: python api-design in-place mutability