一般来说,将参数值变化小的设置为默认参数。引用一个官方的经典示例地址 :这个示例并没有按照预期打印:而是打印了:其实这个错误问题不在默认参数上,而是我们对于及默认参数的初始化的理解有误。上面的示例或许还不能完全说明问题,以下通过观察默认参数的内存地址的方式来说明。这个标识是一个在对象的生命周期期间保证唯一并且不变的整数。在重叠的生命周期中,两个对象可能有相同的id值。如下示例使用id函数清楚说明了问题:output:两次调用bad_append,默认参数a_list的地址是相同的。而且a_list是可变对象,使用append方法添加新元素并不会造成list对象的重新创建,地址的重新分配。
暂无评论