i have object attribute list. example:
obj.a = [3, 4, 5] i following behavior (but can't manage find solution using magics/etc.) :
l = obj.a obj.a[0] = 2 print(l) --> [3, 4, 5] print(obj.a) ---> [2, 4, 5] of course use copy.deepcopy :
l = copy.deepcopy(obj.a) but several reasons like, somehow, make step automatic/hide users.
[edit] using getattribute , returning copy won't work of course:
import copy class test: def __init__(self): self.a = [] def __getattribute__(self, attr): if attr == 'a': return copy.deepcopy(super(test, self).__getattribute__(attr)) any appreciated !
thnak you, thomas
it's not possible make assignment l = obj.a make copy of obj.a. deceze said in comment, make a property returns copy of value every time access it, would, well, make copy every time access it, not when assign l. that's going inefficient, , not behavior want anyway
there's no way obj or obj.a tell difference between this:
x = obj.a and this:
obj.a[:2] whatever happens when access obj.a, it's going happen in both cases. can't "look ahead" see whether it's going assigned variable, copy in particular case.
Comments
Post a Comment