python - Python - 过滤列表中对象的引用
问题描述
我Hero
在python中有这个对象
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
(例如,只修改活着的英雄)。
有什么解决方案可以实现我想要的吗?
任何帮助,将不胜感激!干杯!
解决方案
也许我误解了您的问题,但其中的项目filtered_list
已经引用了Heroes
. 没有制作对象的副本。
如果访问 in中的对象,对 in 中的对象的修改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
它们是同一个对象,因此列表存储的是对对象的引用,而不是对象本身,并且列表推导不会生成对象的副本。
推荐阅读
- python-3.x - 将数据框 -1 中的列值替换为 0
- java - 在 Android 应用程序的改造实现中访问 kotlin 类自动生成的 getter 方法
- typescript - typescript 官方文档中的交集类型示例不起作用
- javascript - 使用空单元格对表格进行排序
- php - Laravel Eloquent wherePivot 方法返回未找到列“pivot”
- java - IntelliJ(或其他免费 IDE/工具)是否有可能缩进整个项目(仅缩进不格式化))
- pdf - PDF 可以有用户密码而没有所有者密码吗?
- excel - 使用文件资源管理器在宏文件中打开文件,在用户文件中运行宏
- google-apps-script - Google Scripts/Mail 中的日期格式 - 找不到方法错误
- release - 当 Dev 有一个不应部署到 prod 的新次要版本时,如何将补丁语义发布到 QA 上的版本?