Trying my hand at this, When the mutable list object is defined as a parameter it is passed around to the classes.
class thing:
def __init__(self, stuff=[]):
self.stuff = stuff
for i in range(10):
obj = thing()
print(obj)
obj.stuff.append(1)
print(obj.stuff)
mylist.append(obj)
print(mylist)
<main.thing object at 0x10ff4b5f8>
[1]
[<main.thing object at 0x10ff4b5f8>]
<main.thing object at 0x10ff4b978>
[1, 1]
[<main.thing object at 0x10ff4b5f8>, <main.thing object at 0x10ff4b978>]
<main.thing object at 0x10ff4b4e0>
[1, 1, 1]
[<main.thing object at 0x10ff4b5f8>, <main.thing object at 0x10ff4b978>, <main.thing object at 0x10ff4b4e0>]
<main.thing object at 0x10ff4b4a8>
[1, 1, 1, 1]
[<main.thing object at 0x10ff4b5f8>, <main.thing object at 0x10ff4b978>, <main.thing object at 0x10ff4b4e0>, <main.thing object at 0x10ff4b4a8>]
<main.thing object at 0x10ff4b5c0>
[1, 1, 1, 1, 1]
[<main.thing object at 0x10ff4b5f8>, <main.thing object at 0x10ff4b978>, <main.thing object at 0x10ff4b4e0>, <main.thing object at 0x10ff4b4a8>, <main.thing object at 0x10ff4b5c0>]
<main.thing object at 0x10ff4b588>
[1, 1, 1, 1, 1, 1]
[<main.thing object at 0x10ff4b5f8>, <main.thing object at 0x10ff4b978>, <main.thing object at 0x10ff4b4e0>, <main.thing object at 0x10ff4b4a8>, <main.thing object at 0x10ff4b5c0>, <main.thing object at 0x10ff4b588>]
<main.thing object at 0x10ff4b6d8>
[1, 1, 1, 1, 1, 1, 1]
[<main.thing object at 0x10ff4b5f8>, <main.thing object at 0x10ff4b978>, <main.thing object at 0x10ff4b4e0>, <main.thing object at 0x10ff4b4a8>, <main.thing object at 0x10ff4b5c0>, <main.thing object at 0x10ff4b588>, <main.thing object at 0x10ff4b6d8>]
<main.thing object at 0x10ff4b710>
[1, 1, 1, 1, 1, 1, 1, 1]
[<main.thing object at 0x10ff4b5f8>, <main.thing object at 0x10ff4b978>, <main.thing object at 0x10ff4b4e0>, <main.thing object at 0x10ff4b4a8>, <main.thing object at 0x10ff4b5c0>, <main.thing object at 0x10ff4b588>, <main.thing object at 0x10ff4b6d8>, <main.thing object at 0x10ff4b710>]
<main.thing object at 0x10ff4b668>
[1, 1, 1, 1, 1, 1, 1, 1, 1]
[<main.thing object at 0x10ff4b5f8>, <main.thing object at 0x10ff4b978>, <main.thing object at 0x10ff4b4e0>, <main.thing object at 0x10ff4b4a8>, <main.thing object at 0x10ff4b5c0>, <main.thing object at 0x10ff4b588>, <main.thing object at 0x10ff4b6d8>, <main.thing object at 0x10ff4b710>, <main.thing object at 0x10ff4b668>]
<main.thing object at 0x10ff4b748>
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
[<main.thing object at 0x10ff4b5f8>, <main.thing object at 0x10ff4b978>, <main.thing object at 0x10ff4b4e0>, <main.thing object at 0x10ff4b4a8>, <main.thing object at 0x10ff4b5c0>, <main.thing object at 0x10ff4b588>, <main.thing object at 0x10ff4b6d8>, <main.thing object at 0x10ff4b710>, <main.thing object at 0x10ff4b668>, <main.thing object at 0x10ff4b748>]
When instanciating the list inside the function block it creates a new one each time.
Here is the output when using the class below.
class Thing:
__ init__(self, stuff):
if stuff:
self.stuff = stuff
else:
self.stuff = []
for i in range(10):
obj = thing()
print(obj)
obj.stuff.append(1)
print(obj.stuff)
mylist.append(obj)
print(mylist)
Output
<main.thing object at 0x10ff4b518>
[1]
[<main.thing object at 0x10ff4b518>]
<main.thing object at 0x10ff4b4e0>
[1]
[<main.thing object at 0x10ff4b518>, <main.thing object at 0x10ff4b4e0>]
<main.thing object at 0x10ff4b6d8>
[1]
[<main.thing object at 0x10ff4b518>, <main.thing object at 0x10ff4b4e0>, <main.thing object at 0x10ff4b6d8>]
<main.thing object at 0x10ff4b550>
[1]
[<main.thing object at 0x10ff4b518>, <main.thing object at 0x10ff4b4e0>, <main.thing object at 0x10ff4b6d8>, <main.thing object at 0x10ff4b550>]
<main.thing object at 0x10ff4b7b8>
[1]
[<main.thing object at 0x10ff4b518>, <main.thing object at 0x10ff4b4e0>, <main.thing object at 0x10ff4b6d8>, <main.thing object at 0x10ff4b550>, <main.thing object at 0x10ff4b7b8>]
<main.thing object at 0x10ff4b7f0>
[1]
[<main.thing object at 0x10ff4b518>, <main.thing object at 0x10ff4b4e0>, <main.thing object at 0x10ff4b6d8>, <main.thing object at 0x10ff4b550>, <main.thing object at 0x10ff4b7b8>, <main.thing object at 0x10ff4b7f0>]
<main.thing object at 0x10ff4b668>
[1]
[<main.thing object at 0x10ff4b518>, <main.thing object at 0x10ff4b4e0>, <main.thing object at 0x10ff4b6d8>, <main.thing object at 0x10ff4b550>, <main.thing object at 0x10ff4b7b8>, <main.thing object at 0x10ff4b7f0>, <main.thing object at 0x10ff4b668>]
<main.thing object at 0x10ff4b6a0>
[1]
[<main.thing object at 0x10ff4b518>, <main.thing object at 0x10ff4b4e0>, <main.thing object at 0x10ff4b6d8>, <main.thing object at 0x10ff4b550>, <main.thing object at 0x10ff4b7b8>, <main.thing object at 0x10ff4b7f0>, <main.thing object at 0x10ff4b668>, <main.thing object at 0x10ff4b6a0>]
<main.thing object at 0x10ff4b748>
[1]
[<main.thing object at 0x10ff4b518>, <main.thing object at 0x10ff4b4e0>, <main.thing object at 0x10ff4b6d8>, <main.thing object at 0x10ff4b550>, <main.thing object at 0x10ff4b7b8>, <main.thing object at 0x10ff4b7f0>, <main.thing object at 0x10ff4b668>, <main.thing object at 0x10ff4b6a0>, <main.thing object at 0x10ff4b748>]
<main.thing object at 0x10ff4b828>
[1]
[<main.thing object at 0x10ff4b518>, <main.thing object at 0x10ff4b4e0>, <main.thing object at 0x10ff4b6d8>, <main.thing object at 0x10ff4b550>, <main.thing object at 0x10ff4b7b8>, <main.thing object at 0x10ff4b7f0>, <main.thing object at 0x10ff4b668>, <main.thing object at 0x10ff4b6a0>, <main.thing object at 0x10ff4b748>, <main.thing object at 0x10ff4b828>]