Python:如何从 class 中的实例解除绑定变量?
Python: How to I unbind a variable from instance in a class?
在class中,假设我有一个实例
self.my_instance=6
然后,在一个方法中,说我有类似的东西
my_variable=self.my_instance
每次我将 my_variable
更改为其他值时,self.my_instance
也会更改其值,这不是我想要的。我想在不影响 self.my_instance
的情况下修改 my_variable
。这在大型程序中也可能非常令人沮丧和困惑。
谢谢!
当您说 my_variable = self.myinstance
时,my_variable
现在只是 self.myinstance
所指对象的别名。要使其成为一个单独的对象,可以使用切片:
my_variable = self.myinstance[:]
用self.myinstance[:]
表示把所有的对象从头到尾都取,也就是全部。但是,由于它是一个切片,因此它 returns 是一个副本,因此这是获取列表副本的常用方法。
这适用于你的情况,因为 my_variable
是一个列表,但如果它是一个字典,例如,你可以使用 copy
模块:
import copy
my_variable = copy.copy(self.myinstance) # Shallow copy
或
my_variable = copy.deepcopy(self.myinstance) # Deep copy
字典也有浅拷贝的.copy()
方法。
在class中,假设我有一个实例
self.my_instance=6
然后,在一个方法中,说我有类似的东西
my_variable=self.my_instance
每次我将 my_variable
更改为其他值时,self.my_instance
也会更改其值,这不是我想要的。我想在不影响 self.my_instance
的情况下修改 my_variable
。这在大型程序中也可能非常令人沮丧和困惑。
谢谢!
当您说 my_variable = self.myinstance
时,my_variable
现在只是 self.myinstance
所指对象的别名。要使其成为一个单独的对象,可以使用切片:
my_variable = self.myinstance[:]
用self.myinstance[:]
表示把所有的对象从头到尾都取,也就是全部。但是,由于它是一个切片,因此它 returns 是一个副本,因此这是获取列表副本的常用方法。
这适用于你的情况,因为 my_variable
是一个列表,但如果它是一个字典,例如,你可以使用 copy
模块:
import copy
my_variable = copy.copy(self.myinstance) # Shallow copy
或
my_variable = copy.deepcopy(self.myinstance) # Deep copy
字典也有浅拷贝的.copy()
方法。