在不同作用域引用同一列表:字典存列表的替代方案咨询
共享列表引用的替代实现方案
给你几个不用字典包裹,也能让不同函数修改同一列表引用的方法:
1. 直接传递列表作为参数
列表本身就是可变对象,直接把列表传给函数,修改列表内的元素会直接作用于原列表,完全不需要字典包装:
a = [1, 2, 3] def func(lst: list): lst[1] = 3 def func2(lst: list): lst[0] = 3 func(lst) func2(a)
执行结果:
>>> a [3, 3, 3]
2. 用类封装列表(适合复杂场景)
如果需要管理的共享状态不止这一个列表,或者想把操作逻辑封装起来,可以用类来包裹列表:
class SharedList: def __init__(self, data): self.lst = data def func(obj: SharedList): obj.lst[1] = 3 def func2(obj: SharedList): obj.lst[0] = 3 func(obj) a = SharedList([1, 2, 3]) func2(a)
执行结果:
>>> a.lst [3, 3, 3]
这种方式能更清晰地组织代码,后续还能给类添加专门的方法来操作列表,扩展性更强。
3. 使用全局变量(不推荐,仅适用于小脚本)
把列表设为全局变量,函数内用global关键字声明后直接修改,虽然能实现需求,但会让代码耦合度变高,不利于维护:
a = [1, 2, 3] def func(): global a a[1] = 3 def func2(): global a a[0] = 3 func() func2()
执行结果:
>>> a [3, 3, 3]
内容的提问来源于stack exchange,提问作者davelopment
相关产品推荐
相关产品推荐

