新对象作为Python中的默认参数

问题描述

在Python函数中将认参数指定为新对象时,多次调用方法实际上并不会创建新对象。它只是返回相同的对象。有人可以解释为什么代码1和2之间有区别吗?

我一直希望在所有情况下都会创建一个全新的对象。

代码1

class MyObj:
     pass
 
def make_my_obj(arg=MyObj()):
     return arg
# o1 and o2 are the same object 
o1 = make_my_obj()
o1
<__main__.MyObj object at 0x043EDEC8>
o2 = make_my_obj()
o2
<__main__.MyObj object at 0x043EDEC8>

代码2

def make_my_obj_2(arg=None):
     if arg is None:
         arg = MyObj()
     return arg
# o3 and o4 are different objects 
o3 = make_my_obj_2()
o4 = make_my_obj_2()
o3
<__main__.MyObj object at 0x001B2E08>
o4
<__main__.MyObj object at 0x001AB9D0>

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)