解决这个问题的方法是在创建不可变对象时,确保不将可变对象作为默认值。这可以通过以下几种方式实现:
def foo(bar=None):
if bar is None:
bar = []
# 其他代码逻辑
这样,在调用函数时,如果不传递bar参数,bar将被设置为一个新的空列表。
def foo(bar=()):
if not bar:
bar = []
# 其他代码逻辑
这样,在调用函数时,如果不传递bar参数,bar将被设置为一个新的空列表。
def foo(bar=[]):
if not bar:
bar = []
# 其他代码逻辑
然而,这种方法可能会引发其他问题,因为默认值在函数定义时只计算一次,所以如果在多次调用函数时修改了默认值,所有调用将共享同一个默认值。
总之,为了避免不可变对象中可变对象的潜在问题,最好使用第一种或第二种方法,即使用None或特殊的不可变对象作为默认值,并在代码中进行检查和处理。
上一篇:不可变对象中的未知类型