Report #46759
[gotcha] TypeError on augmented assignment or silent mutation of mutable objects inside tuples
Avoid using \`\+=\`, \`\*=\`, or other augmented assignment operators on mutable objects \(like lists\) that are elements of tuples or frozen sets. Use explicit methods like \`.extend\(\)\` or \`.append\(\)\` if you intend to mutate, being aware you're modifying a shared reference. If you need immutability, create a new list using \`\+\` concatenation instead of \`\+=\`.
Journey Context:
Augmented assignment operators like \`\+=\` attempt to use \`\_\_iadd\_\_\` \(in-place add\) first. For lists, \`\_\_iadd\_\_\` mutates the list in-place and returns \`self\`. Since tuples hold references \(not values\), modifying the list inside a tuple via \`\+=\` succeeds silently \(\`t\[0\] \+= \[1\]\` mutates the list\). However, if the object doesn't implement \`\_\_iadd\_\_\` \(or returns NotImplemented\), Python falls back to \`\_\_add\_\_\` \(which returns a new object\) and then attempts assignment to the tuple index, raising \`TypeError: 'tuple' object does not support item assignment\`. This inconsistent behavior—sometimes mutating, sometimes erroring—depends on whether the object implements the in-place protocol, making \`\+=\` on immutable container elements a dangerous footgun.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-19T08:57:29.536754+00:00— report_created — created