4

Could someone explain why:

b = 10*[[]]
b[0].append(3)

b now is:

[[3], [3], [3], [3], [3], [3], [3], [3], [3], [3]]

but if I do:

b = [[] for _ in range(10)]
b[0].append(3)

b is now:

[[3], [], [], [], [], [], [], [], [], []]

Also note that

10*[[]] == [[] for [] in range(10)]

returns

True

(Tested in Python 3.6.1)

vaultah
  • 44,105
  • 12
  • 114
  • 143
  • [List of lists changes reflected across sublists unexpectedly](https://stackoverflow.com/q/240178/2301450) – vaultah Aug 23 '17 at 12:53

1 Answers1

5
 because:
    >>> b = 10*[[]]
    >>> b[0] is b[1]
    True
    >>> b = [[] for _ in range(10)]
    >>> b[0] is b[1]
    False
    >>>
bakaDev
  • 367
  • 2
  • 7