r/PythonLearning 4d ago

<python code>

Post image

This is python code to get student salary!

43 Upvotes

10 comments sorted by

View all comments

2

u/Potential_Fix_5007 4d ago

self.marks=[]

Is this the right way to create an empty list for an object value or is there a way to set it within the round brackets?

Im a beginner myself and so far i learned if you want to set a default value you donit within the brackets.

3

u/CodeAndCanyons 4d ago edited 4d ago

u/Potential_Fix_5007 You accidentally dodged one of the absolute biggest footguns in Python by doing it inside the body!

If you tried to set it within the round brackets as a default argument—like writing def __init__(self, name, age, marks=[]):—Python does something incredibly sneaky under the hood. It evaluates that default empty list [] exactly once when the script first loads, not every time you create a new student.

Because lists are mutable (changeable), every single student object you create would end up sharing the exact same list instance in memory. If you appended a grade to Alice's marks, it would suddenly and mysteriously show up in Bob's marks too.

By defining self.marks = [] inside the __init__ body, you guarantee that a brand new, isolated list gets allocated in memory every single time a new student is instantiated.

If you ever do want to allow a list to be passed through the round brackets safely, the standard pythonic trick is to default it to None and handle it in the body:

```python def init(self, name, age, marks=None): self.name = name self.age = age self.marks = marks if marks is not None else []