New submission from Curtis M <3ed7qja...@liamekaens.com>:

Example code to replicate issue on python 3.10.2 is attached.

How to replicate issue:
1. Define a namedtuple where all fields have default values. At least one 
field's default value will be an empty list: []
2. Instantiate 2 instances of the namedtuple.
3. In the first instance, use namedtuple._replace() to add a replacement list 
into a field that defaults to [].
4. Now look at the contents of both namedtuples. *Both* of them are modified, 
even though the code only modified the first object.


***

Output from attached example code:

g.P5 1: myNamedTuple(P1='hello', P2='world', P3=None, P4='', P5=[], P6=[])
h.P5 1: myNamedTuple(P1='good', P2='morning', P3=None, P4='', P5=[], P6=[])
Expected: g.P5: []
Actual:   g.P5: []
Expected: h.P5: []
Actual:   h.P5: []
g.P5 2: myNamedTuple(P1='hello', P2='world', P3=None, P4='', P5=['a', 'b'], 
P6=[])
h.P5 2: myNamedTuple(P1='good', P2='morning', P3=None, P4='', P5=['a', 'b'], 
P6=[])
Expected: g.P5: ['a', 'b']
Actual:   g.P5: ['a', 'b']
Expected: h.P5: []
Actual:   h.P5: ['a', 'b']
g.P5 3: myNamedTuple(P1='hello', P2='world', P3=None, P4='', P5=['a', 'b', 'c', 
'd'], P6=[])
h.P5 3: myNamedTuple(P1='good', P2='morning', P3=None, P4='', P5=['a', 'b', 
'c', 'd'], P6=[])
Expected: g.P5: ['a', 'b', 'c', 'd']
Actual:   g.P5: ['a', 'b', 'c', 'd']
Expected: h.P5: []
Actual:   h.P5: ['a', 'b', 'c', 'd']

----------
components: Library (Lib)
files: namedtuple_example.py
messages: 411079
nosy: user027.7
priority: normal
severity: normal
status: open
title: namedtuple leaks data between instances when field's default value is 
empty list
type: behavior
versions: Python 3.10
Added file: https://bugs.python.org/file50568/namedtuple_example.py

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue46450>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to