首页 > 解决方案 > 尝试在项目中使用 copy.deepcopy() 而不使用导入复制模块

问题描述

所以我为一个名为 Matrix 的“类”做一个项目,我不允许在其中使用任何导入模块。所以基本上我有代码:

class Matrix:

def __init__(self):
    self.__list = []


def set_matrix(self, matrix_list):
    self.__list = matrix_list


def transpose(self):
    
    new_list = []
    for item in range(len(self.__list) + 1):
        new_list.append([])

    for number in range(len(self.__list) + 1):
        for item in self.__list:

            new_list[number].append(item[number])

    self.__list = new_list


def set_element(self, row_index, column_index, variable_to_change):
    self.__list[row_index][column_index] = variable_to_change
       

def __add__(self, other):

    new_list = Matrix()
    new_list.__list = self.__list.copy()
    
    for i in range(len(new_list.__list)):
        for j in range(len(new_list.__list[i])):
            
            new_list.__list[i][j] = new_list.__list[i][j] + other.__list[i][j]
    
    return new_list


def __sub__(self, other):
    new_list = Matrix()
    new_list.__list = self.__list.copy()
    
    for i in range(len(new_list.__list)):
        for j in range(len(new_list.__list[i])):
            
            new_list.__list[i][j] = new_list.__list[i][j] - other.__list[i][j]
    
    return new_list
    
def __str__(self):

    output_string = ''
    for i in self.__list:
        
        output_string += str(i).replace(',', '')\
                            .replace('[', '[ ')\
                            .replace(']', ' ]')\
                            + '\n'

    return output_string

m1 = Matrix()

m1.set_matrix( [[1,2,3,4],[5,6,7,8],[9,8,7,6]] )
print('m1:')
print(m1)
print()

m1.set_element(2,3,1)
print('m1[2,3] = 1:')
print(m1)

m2 = m1 + m1
m3 = m2 - m1

print('m2 = m1 + m1:')
print(m2)
print()

print('m3 = m2 - m1:')
print(m3)
print()

m3.transpose()
print('m3 transposed:')
print(m3)
print()

但是由于 copy() 没有从我使用 set_matrix 方法调用的列表中复制项目,因此 m1 被重新设置为新值,并且我得到错误的输出(所有值都为 0 的矩阵)。但是,如果我使用导入复制模块并使用 copy.deepcopy(self.__list) 而不是 copy() 我会得到正确的结果。有什么方法可以在不使用导入复制模块的情况下做到这一点?整天都在努力完成这项工作,所以任何帮助都将不胜感激:)

标签: pythonarrayslistclasscopy

解决方案


推荐阅读