Code object creation (const interning) can mutate tuples
Abierto
@encukou ya está trabajando en esto.
Desde el 18/7/2024.
type-bug
- Lenguaje dominante
- Python
- Estrellas
- 77.2k
- Forks
- 35.9k
- Métricas de merge de PR
- Métricas de PR pendientes
Descripción
In https://github.com/python/cpython/issues/121863#issuecomment-2232849007, Mark suspected something is off in const interning for code objects. Indeed, there is. For example:
# a bit of setup
import sys
interned = sys.intern("foobar")
def f():
var = "foobar"
# my_tuple = (None, 'foobar'), but with an un-interned string
my_tuple = (None, str(b'foobar', 'ascii'))
print(id(my_tuple), id(my_tuple[1]))
# pass my_tuple as an input argument for a new code object
f.__code__.replace(co_consts=my_tuple)
# there's now a different object in the tuple!
print(id(my_tuple), id(my_tuple[1]))
I'm working on a change to:
- create new tuples instead of mutating old ones
- intern more strings before passing them to
PyCodeconstructors, so that we usually don't need to create new tuples
Linked PRs
- gh-122180
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Evaluación
Este issue todavía no se ha evaluado.