我正在python中编写一个vector类(只是为了看看我能不能)。我遇到了减法方法的问题,我不知道是什么原因造成的。 这是类(我省略了“类Vector:”)。
def __init__(self, p):
print self
self.p = p
def __str__(self):
return str(list(self.p))
def equals(self, v):
if type(self) == type(v):
return str(self) == str(v)
return false
def size(self):
return len(self.p)
def add(self, v):
a = self.p
b = v.p
if self.size() == v.size():
for i in range(0, self.size()):
a[i] += b[i]
return Vector(a)
raise Exception()
def subtract(self, v):
a = self.p
b = v.p
if self.size() == v.size():
for i in range(0, self.size()):
a[i] -= b[i]
return Vector(a)
raise Exception()
def dot(self, v):
total = 0
if self.size() == v.size():
for i in range(0, len(self.p)):
total += self.p[i] * v.p[i]
return total
raise Exception()
def norm(self):
total = 1
if self.size() == v.size():
for i in range(0, len(self.p)):
total += self.p[i]^2
return total
raise Exception()
当我尝试做的时候:
a = Vector([1,1])
a.subtract(Vector[1,1])
print a
我的想法说我应该得到[1,1]作为输出,因为当我做减法时我没有改变Vector a的任何值,我返回一个带有它应该具有的值的新向量。当我打印对象时它告诉我它在内存中的不同空间但是'print a'的输出是[0,0]
如果我这样做
a = Vector(1,1)
b = a
a.subtract(Vector([1,1])
print a,b
我的输出是[0,0] [0,0],我想要的是[0,0] [1,1] 为什么b会改变?
答案 0 :(得分:0)
第一个问题:
(1, 1) - (1, 1) == (0, 0)
程序的输出是正确的。您可以使用a
更改函数中a[i] -= b[i]
的值,其中a
是self
中坐标列表(不列表副本) }和b
v
中的坐标列表(同样,不一个副本)。
第二个问题:
b = a
a
和b
现在是相同的对象(不是具有相同值的不同对象),因此它们会同时更改。
将a
和b
视为您计算机的地址。
a = Vector(1,1) # There is a Vector object somewhere in memory, e.g. 12345. Then a = 12345
b = a # b = a = 12345 (still the address of the same Vector object)
a.subtract(Vector([1,1])) # Change whatever is stored at the address of a = 12345
print a,b # both are still the address of the same object you modified in the previous step!