Копирование начальной информации без ссылки на обрабатываемую переменную

#python #arrays #copy #global

Вопрос:

Я пытаюсь создать начальную копию переменной, которую я хотел бы сравнить в конце с обработанной переменной. Вот что у меня сейчас есть:

 def sudoku_solver(sudoku):
    global start_sudoku
    start_sudoku = copy.deepcopy(sudoku)
    solution(sudoku)
    ......
 

Я пытаюсь определить это как глобальную переменную, так как у меня есть вторая def function Я использую для обработки решения, и в конце концов я хотел бы сравнить, совпадают ли два решения или нет:

 def self.solution(sudoku):
    ......
    if (len(sudoku) == len(start_sudoku)) == True:
        if possible(y, x, n):
    ......

def self.possible(y, x, n):
 

однако эти два пункта всегда одинаковы, когда я добираюсь до конца кода. Я проверил, и удостоверения личности разные, однако они всегда заканчиваются одинаково. Как глобальная переменная может оставаться независимой от первой и поддерживать только первое представление информации?

Ответ №1:

Ваша логика предполагает, что вам нужно состояние, для чего и предназначены классы. Использование класса-более чистый подход, чем работа с глобальными переменными.

 class SudokuSolver:
    def __init__(self, sudoku):
        self.start_sudoku = copy.deepcopy(sudoku)
        self.solution(sudoku)
        ...

    def solution(self, sudoku):
        ...
        if len(sudoku) == len(self.start_sudoku):
            if self.possible(y, x, n):
        ...

    def possible(self, y, x, n):
        ...
 

Комментарии:

1. спасибо, это выглядит многообещающе, однако сейчас я изо всех сил пытаюсь вызвать функцию def в классе под названием possible. Как мне это сделать?

2. Я обновил приведенную выше информацию, чтобы представить, с чем я борюсь

3. Я обновил свой ответ. Для доступа к другим методам (или атрибутам) класса вы можете использовать self.method_name() . Убедитесь, что метод экземпляра принимает self в качестве первого аргумента ссылку на текущий запущенный объект, например, позволяя вам получить доступ к набору self.start_sudoku . Видишь docs.python.org/3/library/stdtypes.html#methods