ipython / ipython/traitlets

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

オープン
#481 コメント 2 件 リアクション 0 件 担当者 0 名 GitHub で見る
主要言語
Python
スター
653
フォーク
217
平均マージ
2日 21時間
マージ済み PR(30日)
2

説明

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
```

コントリビューションガイド

コントリビューションガイドを開く

評価

この issue はまだ評価されていません。

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。