1

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.

quamrana
  • 37,849
  • 12
  • 53
  • 71
mjrmarquis
  • 11
  • 2

0 Answers0