From 95d8bb2e8551e61d1603f588dbed053344fada80 Mon Sep 17 00:00:00 2001 From: Rapptz Date: Mon, 24 Sep 2018 22:06:49 -0400 Subject: Change internal representation of roles in Member and Emoji. Introduce a new internal type, SnowflakeList, which has better memory footprint over a regular list or set of roles. It is suspected that there will be a 9x reduction of memory for every Emoji instance and a 48 byte saving per Member instance. However, these savings will probably only be evident on larger bots. As a consequence of this change, Member.roles is now computed lazily. Currently I am not sure if I want to do the initial sorting on the SnowflakeList for Member, as this comes with a O(n log n) cost when creating a Member for little purpose since SnowflakeList.has is not overly relied on. If CPU time becomes an issue this might change. --- discord/role.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'discord/role.py') diff --git a/discord/role.py b/discord/role.py index 4610c7d0..1068b20b 100644 --- a/discord/role.py +++ b/discord/role.py @@ -173,7 +173,8 @@ class Role(Hashable): if self.is_default(): return all_members - return [member for member in all_members if self in member.roles] + role_id = self.id + return [member for member in all_members if member._roles.has(role_id)] async def _move(self, position, reason): if position <= 0: -- cgit v1.2.3