Python中变量自我赋值是否会触发实际内存赋值及性能影响?
自赋值操作的编译执行逻辑
你提到的a_list = a_list这类自赋值操作,在标准CPython解释器中不会被优化跳过,会生成真实的赋值字节码指令执行。不过Python的变量赋值本质是修改引用指向,仅操作指针地址,本身开销极低,不需要过度担心。
两段代码的性能对比
你给出的两段函数实现,理论上三元表达式的写法确实存在额外开销:
- 普通if分支写法:仅当
a_list is None为真时才执行赋值操作,a_list有传入值时没有额外操作def foo(a_list: list = None): if a_list is None: a_list = ['default', 'list', 'values'] - 三元表达式写法:不管
a_list是否为None,都会执行一次赋值操作,当a_list不为None时就会多执行一次无意义的自赋值def foo(a_list: list = None): a_list = ['default', 'list', 'values'] if a_list is None else a_list
不过要注意的是,这个额外的自赋值开销极其微小,普通业务场景下完全观测不到差异,只有在函数被超高频调用(比如每秒调用数十万次以上)的场景下才会有可感知的影响。如果追求极致性能,优先选择if分支的写法即可。
内容的提问来源于stack exchange,提问作者LarsJaeger
相关产品推荐
相关产品推荐

