]> granicus.if.org Git - python/commit
bpo-33234 Improve list() pre-sizing for inputs with known lengths (GH-9846)
authorPablo Galindo <Pablogsal@gmail.com>
Sun, 28 Oct 2018 20:16:26 +0000 (20:16 +0000)
committerGitHub <noreply@github.com>
Sun, 28 Oct 2018 20:16:26 +0000 (20:16 +0000)
commit372d705d958964289d762953d0a61622755f5386
treef6a01b7f97739c53a8a99812ce690cbd7058588c
parent569d12f44847f18fc5b514b24e8ab901b0d96895
bpo-33234 Improve list() pre-sizing for inputs with known lengths (GH-9846)

The list() constructor isn't taking full advantage of known input
lengths or length hints. This commit makes the constructor
pre-size and not over-allocate when the input size is known (the
input collection implements __len__). One on the main advantages is
that this provides 12% difference in memory savings due to the difference
between overallocating and allocating exactly the input size.

For efficiency purposes and to avoid a performance regression for small
generators and collections, the size of the input object is calculated using
__len__ and not __length_hint__, as the later is considerably slower.
Lib/test/test_list.py
Misc/NEWS.d/next/Core and Builtins/2018-04-17-01-24-51.bpo-33234.l9IDtp.rst [new file with mode: 0644]
Objects/listobject.c