Fwd: PYTHON BUG. deleting elements of list.

Chris Angelico rosuav at gmail.com
Wed Sep 9 04:36:23 EDT 2020


On Wed, Sep 9, 2020 at 6:18 PM Nicholas Cole <nicholas.cole at gmail.com> wro
>
> On Wed, Sep 9, 2020 at 8:52 AM Chris Angelico <rosuav at gmail.com> wrote:
>
> [snip]
> > And if you absolutely have to mutate in place:
> >
> > items[:] = [i for i in items if i not in "bcd"]
>
> How does that work to mutate in place?

Technically it constructs a new filtered list, and then replaces the
contents of the original list with the filtered one. That's
effectively an in-place mutation; any other reference to that same
list will see the change. Compare:

a = list(range(20))
b = a
a = [n for n in a if n % 3]
print(a)
print(b)

You'll see that a and b now differ. But if you use slice assignment:

a[:] = [n for n in a if n % 3]

you'll see that the two are still the same list (and "a is b" will
still be True). It's replacing the contents, rather than rebinding the
name.

ChrisA


More information about the Python-list mailing list