我有这个 Hero python中的对象
Hero
class Hero: def __init__(self, json_def, player_index): self._alive = True ... # other attributes
那么,我有 英雄 对象,即。
英雄
Heroes = [HeroObj1, HeroObj2, HeroObj3, HeroObj4]
我想做的是过滤列表并获取对象引用,而不是对象的副本。我知道我可以像下面这样进行过滤。
filtered_list = [x for x in Heroes if x.alive]
但是,这种方法将导致将过滤后的对象复制到 filtered_list 。我想做参考,以便修改初始列表( Heroes )当我修改此筛选版本时/ 筛选的\u列表 (例如,仅修改活着的英雄)。
filtered_list
Heroes
筛选的\u列表
是否有任何解决方案来实现我所寻求的目标?
任何帮助都将不胜感激!干杯
也许我误解了你的问题,但是 filtered_list 已引用中保存的相同对象 Heroes 。尚未制作对象的副本。
对中对象的修改 筛选的\u列表 如果访问中的对象,也将可见 heroes 因为它们指的是相同的对象。
heroes
>>> h = Hero() >>> l1 = [h] >>> l2 = [x for x in l1 if x._alive] >>> l1[0] is l2[0] # are they same object? True >>> l2[0]._active = False >>> l1[0]._active False >>> l1[0] is l2[0] # are they still same object? True
它们是相同的对象,因此列表存储的是对对象的引用,而不是对象本身,并且列表理解不会复制对象。