Python 共享同一列表的两个对象

Python 共享同一列表的两个对象,python,python-2.7,Python,Python 2.7,代码: class matrix(): row=0 colum=0 def __init__(self,x,y): self.m=[] self.row=x self.colum=y #Makes a empty matrix of size x*y for i in range(self.row): self.m.append([]) for

代码:

    class matrix():

    row=0
    colum=0
    def __init__(self,x,y):
    self.m=[]
        self.row=x
        self.colum=y
        #Makes a empty matrix of size x*y
        for i in range(self.row):
            self.m.append([])
            for j in range(self.colum):
                self.m[i].append(int(raw_input("Enter element")))
#To diplay the matrix
def display(x):
    k=x.m
    for i in range(0,x.row):
            for j in range(0,x.colum):
                k[i][j]=x.m[i][j]
    return k
row1=int(raw_input("Enter Number of rows of 1st Matrix"))
colum1=int(raw_input("Enter Number of colume of 1st Martrix"))
matrix1=matrix(row1,colum1)
print "1st Matrix:",display(matrix1) # displaying the first matix before adding elements
row2=int(raw_input("Enter Number of rows of 2nd Matrix"))
colum2=int(raw_input("Enter Number of colume of 2nd Martrix"))
matrix2=matrix(row2,colum2)
print "Matrix 2:",display(matrix2) #displaying the second matrix before adding elements
Enter Number of rows of 1st Matrix2
Enter Number of colume of 1st Martrix2
Enter element11
Enter element22
Enter element33
Enter element44
1st Matrix: [[11, 22], [33, 44]]
Enter Number of rows of 2nd Matrix2
Enter Number of colume of 2nd Martrix3
Enter element1
Enter element2
Enter element3
Enter element4
Enter element5
Enter element6
Matrix 2: [[11, 22, 1, 2, 3], [33, 44, 4, 5, 6], [], []]
输出:

    class matrix():

    row=0
    colum=0
    def __init__(self,x,y):
    self.m=[]
        self.row=x
        self.colum=y
        #Makes a empty matrix of size x*y
        for i in range(self.row):
            self.m.append([])
            for j in range(self.colum):
                self.m[i].append(int(raw_input("Enter element")))
#To diplay the matrix
def display(x):
    k=x.m
    for i in range(0,x.row):
            for j in range(0,x.colum):
                k[i][j]=x.m[i][j]
    return k
row1=int(raw_input("Enter Number of rows of 1st Matrix"))
colum1=int(raw_input("Enter Number of colume of 1st Martrix"))
matrix1=matrix(row1,colum1)
print "1st Matrix:",display(matrix1) # displaying the first matix before adding elements
row2=int(raw_input("Enter Number of rows of 2nd Matrix"))
colum2=int(raw_input("Enter Number of colume of 2nd Martrix"))
matrix2=matrix(row2,colum2)
print "Matrix 2:",display(matrix2) #displaying the second matrix before adding elements
Enter Number of rows of 1st Matrix2
Enter Number of colume of 1st Martrix2
Enter element11
Enter element22
Enter element33
Enter element44
1st Matrix: [[11, 22], [33, 44]]
Enter Number of rows of 2nd Matrix2
Enter Number of colume of 2nd Martrix3
Enter element1
Enter element2
Enter element3
Enter element4
Enter element5
Enter element6
Matrix 2: [[11, 22, 1, 2, 3], [33, 44, 4, 5, 6], [], []]
我已经在Python2.7中编写了以下代码,我希望能够使用类矩阵的构造函数创建两个给定大小的matix。 如输出所示,对象matrix1和matrix2共享相同的列表m。在默认情况下,我们不应该使用两个单独的列表来存储它。 预期矩阵2为

[[1,2,3],[4,5,6]]

您可以将
def display
函数移动到类本身中。这将成为从
矩阵
对象调用的方法,即
matrix1.display()
。变量
m
当前未保存在
矩阵
对象中。请尝试下面的代码

class matrix(object):
    def __init__(self,x,y):
        self.m = []
        self.row = x
        self.colum = y
        #Makes a empty matrix of size x*y
        for i in range(self.row):
            self.m.append([])
            for j in range(self.colum):
                self.m[i].append(int(raw_input("Enter element ({},{}): ".format(i,j))))

    #To diplay the matrix
    def display(self):
        for r in self.m:
            print(r)


>>> matrix1 = matrix(2,2)
Enter element (0, 0): 11
Enter element (0, 1): 22
Enter element (1, 0): 33
Enter element (1, 1): 44

>>> matrix1.display()
[11, 22]
[33, 44]

因为您在创建类时初始化了“m”列表。移到init@Alex谢谢你解决了这个问题。但是为什么我所做的不管用呢?。是不是同样的东西列表链接到一个类而不是它的实例。所以一个类矩阵的所有实例都将共享它。如果您将其置于init,它将在每次创建实例时创建一个新列表。这就是区别所在。@Alex Oh是否有办法将列表m链接到每个实例,这是否也仅适用于列表或其他数据类型?