我正在尝试生成向量的标量积 v1.scalar_product(3)
但注意到实例也在发生变化。
class Vector(object):
def __init__(self, data = None):
if data is None:
self._vector = []
else:
self._vector = data[:]
def __str__(self):
if self._vector == []:
return '<>'
else:
return ('<'+ str(float(self._vector[0])) + ', ' + str(float(self._vector[1])) + ', ' + str(float(self._vector[2])) + '>')
def dim(self):
if self._vector == None:
return 0
else:
return len(self._vector)
def get(self, index):
if index > self.dim():
raise IndexError
else:
return float(self._vector[index])
def set(self, index, value):
if index > self.dim():
raise IndexError
else:
self._vector[index] = value
def scalar_product(self, scalar):
v3 = self
for i in range(self.dim()):
v3.set(i, self.get(i) * scalar)
return v3._vector
v1 = Vector([1, 2, 3])
v2 = v1.scalar_product(3)
v2
正确返回 [3.0, 6.0, 9.0]
但是v1
应该保持不变[1, 2, 3]
但目前更改为 <3.0, 6.0, 9.0>
为什么?
最佳答案
在执行 scalar_product
时,您正在修改您的 v1
实例(因为 v3 = self
)。如果您想返回一个新向量而不是修改当前向量,请使用深度复制或新向量创建 v3
的新实例。
import copy
def scalar_product(self, scalar):
# using deep copy
v3 = copy.deepcopy(self)
# or using new Vector object and list builtin copy
v3 = Vector(data=self._vector.copy())
for i in range(self.dim()):
v3.set(i, self.get(i) * scalar)
return v3._vector
关于python - 不修改调用实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59070304/