1. 问题描述:
给Bus类赋值默认值[], 创建两个类实例,两个实例的pas指向同一个地址

原因:默认值,在函数定义时计算(通常是在加载模块的时候),因此,默认值变成了函数的属性,所以,初始化类对象的时候,只要默认值是可变对象,并且未传入这个参数,这个类的这个参数,就会指向函数给默认值开辟的空间,

2. 防御可变参数
如果定义函数接受可变参数,应该考虑是否期望修改传入的参数
1. 修改传入的参数:

2. 不期望修改传入的参数:

注意点:
对于可变参数,确认未传入时,要为对象新建参数,如果希望修改传入的参数,则直接赋值,否则,赋值为参数的副本。
本文深入探讨了Python中使用默认参数的潜在问题,特别是当默认参数是可变对象时,多个函数调用间如何共享同一对象的问题。文章提供了理解和避免这一陷阱的方法,包括在函数内部重新创建参数的副本。
1391

被折叠的 条评论
为什么被折叠?



