__slots__Python中的目的是什么- 特别是关于我何时想要使用它,何时不想使用它?
我有一些日志数据,例如:
logs = [
{'id': '1234', 'error': None, 'fruit': 'orange'},
{'id': '12345', 'error': None, 'fruit': 'apple'}
]
Run Code Online (Sandbox Code Playgroud)
每个字典都有相同的键:'id'、'error'和'fruit'(在本例中)。
我想从此列表中删除重复项,但直接dict且set基于基础的方法不起作用,因为我的元素本身就是dicts,不可散列:
>>> set(logs)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'dict'
Run Code Online (Sandbox Code Playgroud)
另一种方法是排序并使用 itertools.groupby - 但字典也不具有可比性,因此这也不起作用:
>>> from itertools import groupby
>>> [k for k, _ in groupby(sorted(logs))]
Traceback (most recent call last):
File "<stdin>", line 1, in <module> …Run Code Online (Sandbox Code Playgroud) Python文档中指出,其优点之一namedtuple是它与元组一样具有内存效率.
为了验证这一点,我将iPython与ipython_memory_usage一起使用.测试结果如下图所示:
测试表明:
10000000namedtuple使用850 MiBRAM的实例10000000 tuple73 MiBRAM 周围使用的实例10000000 dict570 MiBRAM 周围使用的实例所以namedtuple使用了更多的内存tuple!甚至更比dict!
你怎么看?我哪里做错了?