diff options
| author | Rapptz <[email protected]> | 2018-09-24 22:06:49 -0400 |
|---|---|---|
| committer | Rapptz <[email protected]> | 2018-09-24 22:19:42 -0400 |
| commit | 95d8bb2e8551e61d1603f588dbed053344fada80 (patch) | |
| tree | d32a40f9a8a5d4244558be90bf4a2ad8b69be9ca /discord/role.py | |
| parent | Change internal role storage in Guild to a dict instead of a list. (diff) | |
| download | discord.py-95d8bb2e8551e61d1603f588dbed053344fada80.tar.xz discord.py-95d8bb2e8551e61d1603f588dbed053344fada80.zip | |
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.
Diffstat (limited to 'discord/role.py')
| -rw-r--r-- | discord/role.py | 3 |
1 files changed, 2 insertions, 1 deletions
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: |