I got really confused over functionality of lists working with classes.
class BasicClass:
def __init__(self,money = [200]):
self.money=money
def add_money(self,value):
self.money.append(value)
object=BasicClass()
object_2=BasicClass()
object.add_money(500)
object_2.add_money(300)
print(object.money)
print(object_2.money)
OUTPUT:
[200, 500, 300]
[200, 500, 300]
Version with class variable:
class BasicClass:
money = [200]
def __init__(self):
pass
def add_money(self,value):
self.money.append(value)
object=BasicClass()
object_2=BasicClass()
object.add_money(500)
object_2.add_money(300)
print(object.money)
print(object_2.money)
OUTPUT:
[200, 500, 300]
[200, 500, 300]
Version with no default
class BasicClass:
def __init__(self,money):
self.money=money
def add_money(self,value):
self.money.append(value)
object=BasicClass([100])
object_2=BasicClass([100])
object.add_money(500)
object_2.add_money(300)
print(object.money)
print(object_2.money)
OUTPUT:
[100, 500]
[100, 300]
It looks like when I don't define my list through __init__
when I'm creating an object, python uses the same instance of list for both objects later. I'm just wondering what is goal of this functionality and how exactly it works.