我正在为多项式做一个类,我遇到了复制函数的问题。它假设创建Poly对象的副本并返回对新Poly对象的引用。我真的坚持这个复制的想法。谢谢你的帮助
class Poly:
def __init__ (self, p):
self.a = p
self.deg= len(p) -1
if len(p) == 1 and p[0] == 0:
self.deg = -1
def evalPoly(self,x0):
''' evaluates the polynomial at value x'''
b=0
for coefficients in reversed(self.a):
b=b*x0+int(coefficients)
return b
def polyPrime(self):
'''replaces the coeffiecients of self with the coefficients
of the derivative polynomial '''
if self.deg == 0:
return np.zeroes(1,float), 0
else:
newdeg=self.deg-1
p=[i*self.a[i] for i in range(1,self.deg+1)]
p=str(p)[1: -1]
p=eval(p)
return p
def copy(self):
return Poly(self.a)
我坚持如何创建Poly对象的副本并返回对新Poly对象的引用
答案 0 :(得分:4)
我认为您遇到的问题是,当self.a
是一个列表时,您将在新Poly对象的实例化中传递对该列表的引用。
您应该复制列表并提供该副本以实例化对象:
import copy
class Poly:
...
def copy(self):
return Poly(copy.copy(self.a))
答案 1 :(得分:2)
问题实际上隐藏在__init__()
。
self.a = p[:]
答案 2 :(得分:2)
Python中的赋值语句不复制对象,它们在目标和对象之间创建绑定。对于可变或包含可变项目的集合,有时需要一个副本,因此可以更改一个副本而不更改另一个副本。
查看复制模块:
答案 3 :(得分:1)
请你详细说明为什么它不起作用?这对我很有用:
class Poly(object):
def __init__ (self, p):
self.a = p
self.deg= len(p) -1
if len(p) == 1 and p[0] == 0:
self.deg = -1
def evalPoly(self,x0):
''' evaluates the polynomial at value x'''
b=0
for coefficients in reversed(self.a):
b=b*x0+int(coefficients)
return b
def polyPrime(self):
'''replaces the coeffiecients of self with the coefficients
of the derivative polynomial '''
if self.deg == 0:
return np.zeroes(1,float), 0
else:
newdeg=self.deg-1
p=[i*self.a[i] for i in range(1,self.deg+1)]
p=str(p)[1: -1]
p=eval(p)
return p
def __str__(self):
return "%s %s" % (self.a, self.deg)
def copy(self):
return Poly(self.a)
if __name__ == "__main__":
p = Poly((1,3))
print p
x = p.copy()
print x
编辑:好的,我现在看到他正在传递一个可变的列表是普遍的共识。