diff options
author | GuĂ°ni Natan Gunnarsson <1493259+GudniNatan@users.noreply.github.com> | 2020-01-12 17:41:49 (GMT) |
---|---|---|
committer | Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> | 2020-01-12 17:41:49 (GMT) |
commit | 9f3fc6c5b4993f2b362263b494f84793a21aa073 (patch) | |
tree | 6e61e55901eff20c065f1791118ab41484639ddb /Lib/copy.py | |
parent | 54cfbb2feee1f7328c3d6799ec3734b00824b555 (diff) | |
download | cpython-9f3fc6c5b4993f2b362263b494f84793a21aa073.zip cpython-9f3fc6c5b4993f2b362263b494f84793a21aa073.tar.gz cpython-9f3fc6c5b4993f2b362263b494f84793a21aa073.tar.bz2 |
bpo-38293: Allow shallow and deep copying of property objects (GH-16438)
Copying property objects results in a TypeError. Steps to reproduce:
```
>>> import copy
>>> obj = property()
>>> copy.copy(obj)
````
This affects both shallow and deep copying.
My idea for a fix is to add property objects to the list of "atomic" objects in the copy module.
These already include types like functions and type objects.
I also added property objects to the unit tests test_copy_atomic and test_deepcopy_atomic. This is my first PR, and it's highly likely I've made some mistake, so please be kind :)
https://bugs.python.org/issue38293
Diffstat (limited to 'Lib/copy.py')
-rw-r--r-- | Lib/copy.py | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/Lib/copy.py b/Lib/copy.py index f53cd8c..41873f2 100644 --- a/Lib/copy.py +++ b/Lib/copy.py @@ -107,7 +107,7 @@ _copy_dispatch = d = {} def _copy_immutable(x): return x for t in (type(None), int, float, bool, complex, str, tuple, - bytes, frozenset, type, range, slice, + bytes, frozenset, type, range, slice, property, types.BuiltinFunctionType, type(Ellipsis), type(NotImplemented), types.FunctionType, weakref.ref): d[t] = _copy_immutable @@ -195,6 +195,7 @@ d[type] = _deepcopy_atomic d[types.BuiltinFunctionType] = _deepcopy_atomic d[types.FunctionType] = _deepcopy_atomic d[weakref.ref] = _deepcopy_atomic +d[property] = _deepcopy_atomic def _deepcopy_list(x, memo, deepcopy=deepcopy): y = [] |