ipython / ipython/traitlets

copy(HasTraits) creates a clone with shared state from the original

Abierto
#481 2 comentarios 0 reacciones 0 asignados Ver en GitHub
Lenguaje dominante
Python
Estrellas
653
Forks
217
Merge medio
2 d 21 h
PR fusionados (30 d)
2

Descripción

Actually the results of using `copy()` on a `Hastrait` with [borged](https://www.google.it/search?q=python+borg) trait values:

```python
from copy import copy

class C(HasTraits):
a = Int()

c = C(a=1)
copy(c).a = 2
assert c.a == 1 # This FAILS because it is also 2!
```

## Suggested solution
I guess we need this line:
```python
d['_trait_values'] = self._trait_values.copy()
```
in `HasTraits.__getstate__()`:
https://github.com/ipython/traitlets/blob/3164ffb43167e9d1688046fbe0aefa424af5b58d/traitlets/traitlets.py#L1084-L1091

And i'm wondering whether the lock must no be shared, either:
```python
d['_cross_validation_lock'] = False
```

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.