{"slug": "mutable-default-arguments-in-python-why-defaults-bites", "title": "Mutable default arguments in Python: why `__defaults__` bites", "summary": "A Python programming note published September 2, 2026 warns that mutable default arguments persist across calls because function defaults are stored in the __defaults__ attribute, so a function defined as def add1(x=[]) returns [1], then [1, 1], then [1, 1, 1] on successive calls. The example shows add1.__defaults__ holding ([1, 1, 1],), demonstrating that x.append(1) mutates the shared default object rather than creating a fresh list.", "body_md": "Mutable default arguments in Python: why `__defaults__` bites\n\nSeptember 2, 2026\n\nPython\n\nPython\n\nBecause Python functions’ defaults are kept in __defaults__, avoid mutable defaults:\n\n```\ndef add1(x=[]):\n    x.append(1) # same as: add1.__defaults__[0].append(1) ‼️\n    return x\nadd1() # [1]\nadd1() # [1, 1]\nadd1() # [1, 1, 1] 🤯\n```\n\nadd1.__defaults__   # ([1, 1, 1],)\n\n←\nPython generator frames: Inspecting locals with gi_frame\n\nClaude Code always produces something. That’s the hard part.\n→", "url": "https://wpnews.pro/news/mutable-default-arguments-in-python-why-defaults-bites", "canonical_source": "https://lernerpython.com/2026/09/02/mutable-default-arguments-in-python-why-defaults-bites/", "published_at": "2026-09-02 06:00:00+00:00", "updated_at": "2026-09-14 13:47:03.290135+00:00", "lang": "en", "topics": ["developer-tools"], "entities": ["Python"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/mutable-default-arguments-in-python-why-defaults-bites", "markdown": "https://wpnews.pro/news/mutable-default-arguments-in-python-why-defaults-bites.md", "text": "https://wpnews.pro/news/mutable-default-arguments-in-python-why-defaults-bites.txt", "jsonld": "https://wpnews.pro/news/mutable-default-arguments-in-python-why-defaults-bites.jsonld"}}