This question already has answers here:
How can I assign by value in python
(2 个回答)
4年前关闭。
我正在制作一类由字典表示的多项式对象:
这是我的代码中与问题相关的部分:
每当我尝试使用
我真的不明白为什么原来的
任何人都可以澄清这样我可以解决这个问题吗?
您获取了对系数字典的引用并否定了每个成员。这不是副本;这是对原文的引用。
如果您尝试返回单独的字典,请使用几种可用的复制方法之一。一个流行的是来自类本身的
要检查项目的“句柄”,请使用
这很容易表明这两个变量名指的是同一个对象。
(2 个回答)
4年前关闭。
我正在制作一类由字典表示的多项式对象:
这是我的代码中与问题相关的部分:
class Sparse_polynomial():
def __init__(self, coeffs_dict):
self.coeffs_dict = coeffs_dict
def __repr__(self):
terms = [" + ("+str(self.coeffs_dict[k])+"*x^" + str(k)+")" \
for k in sorted(self.coeffs_dict.keys(), reverse=True)]
terms = "".join(terms)
return terms[3:]
def __neg__(self):
neg_pol= self.coeffs_dict
for key in self.coeffs_dict:
neg_pol[key]= -self.coeffs_dict[key]
return Sparse_polynomial(neg_pol)
每当我尝试使用
__neg__
方法时,原始对象都会发生变化。例如:>>> p1= Sparse_polynomial({1:3,5:1})
>>> p1
(1*x^5) + (3*x^1)
>>> -p1
(-1*x^5) + (-3*x^1)
>>> p1
(-1*x^5) + (-3*x^1)
>>>
我真的不明白为什么原来的
p1
会发生变化。我没有直接改变它,只访问了它的字段。任何人都可以澄清这样我可以解决这个问题吗?
最佳答案
那不是真的:看看你的代码......
def __neg__(self):
neg_pol= self.coeffs_dict
for key in self.coeffs_dict:
neg_pol[key]= -self.coeffs_dict[key]
您获取了对系数字典的引用并否定了每个成员。这不是副本;这是对原文的引用。
如果您尝试返回单独的字典,请使用几种可用的复制方法之一。一个流行的是来自类本身的
copy
:neg_pol = self.coeffs_dict.copy()
要检查项目的“句柄”,请使用
id
方法。例如:print id(self.coeffs_dict), id(neg_pol)
这很容易表明这两个变量名指的是同一个对象。
关于python - 为什么我的实例会发生变化?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44447495/
10-10 15:16