Python object1 = object2

时间:2014-08-24 15:15:40

标签: python class variables object

我正在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会改变?

1 个答案:

答案 0 :(得分:0)

第一个问题:

(1, 1) - (1, 1) == (0, 0)

程序的输出是正确的。您可以使用a更改函数中a[i] -= b[i]的值,其中aself中坐标列表(列表副本) }和b v中的坐标列表(同样,一个副本)。

第二个问题:

b = a

ab现在是相同的对象(不是具有相同值的不同对象),因此它们会同时更改。

ab视为您计算机的地址。

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!