this post was submitted on 26 Feb 2025
24 points (100.0% liked)

Python

6723 readers
1 users here now

Welcome to the Python community on the programming.dev Lemmy instance!

๐Ÿ“… Events

PastNovember 2023

October 2023

July 2023

August 2023

September 2023

๐Ÿ Python project:
๐Ÿ’“ Python Community:
โœจ Python Ecosystem:
๐ŸŒŒ Fediverse
Communities
Projects
Feeds

founded 2 years ago
MODERATORS
 
class Node:
    def __init__(self, edges = set()):
        self.edges = edges


def main():
    foo = Node()
    bar = Node()
    quz = Node()

    foo.edges.add(bar)
    bar.edges.add(foo)

    assert(foo is not bar) # assertion succeeds
    assert(foo is not quz) # assertion succeeds
    assert(bar is not quz) # assertion succeeds
    assert(len(quz.edges) == 0) # assertion fails??


main()

spoilerMutable default values are shared across objects. The set in this case.

you are viewing a single comment's thread
view the rest of the comments
[โ€“] [email protected] 1 points 4 days ago* (last edited 4 days ago)

Wow, I learned this bug during a job interview I had this week. I'm not much of a Python guy, but I was givin a Python coding challenge and I tried default initializing a parameter to an empty list. The guy interviewing me looked horrified and explained the problem and sent me an article about it to read later. It's a odd coincidence coming across it twice in one week.