我在python中有这个Hero
对象
class Hero:
def __init__(self, json_def, player_index):
self._alive = True
... # other attributes
然后,我有Hero
对象列表,即
Heroes = [HeroObj1, HeroObj2, HeroObj3, HeroObj4]
我想要做的是过滤列表并获取对象引用,而不是对象的副本。我知道我可以像下面那样进行过滤。
filtered_list = [x for x in Heroes if x.alive]
但是,此方法将导致将过滤的对象复制到filtered_list
。我想做参考,以便在修改此过滤版本/ Heroes
时修改初始列表(filtered_list
)(例如,仅修改活着的英雄)。
有没有解决方案来实现我的目标?
任何帮助将不胜感激!干杯!
答案 0 :(得分:1)
也许我误解了你的问题,但filtered_list
中的项目已经引用了Heroes
中的相同对象。没有制作任何物品的副本。
如果访问filtered_list
中的对象,则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
它们是同一个对象,因此列表存储对象的引用,而不是对象本身,并且列表理解不会创建对象的副本。