@Pro100usr

Почему .append() добавляет неизмененные данные?

Здравствуйте, подскажите почему в список отправляется [3,3] если заменилось потом на [4, 3] и [5, 3] в качестве примера? Вообще изначально хотел работать с "gun", потом переприсвоил на nun и ошибка оставалась. Пробовал даже через nun = gun.copy() и тоже ничего.
import random
def find_x( v_h, gun):
    #функция возможных попаданий
    nun = gun
    possible = []
    rand = random.randint(0, 1)
    rand_list = [1,2,-1,-2]
    rand_list = [-1,-2,1,2]

    def infield( *args):
    #проверка 1 значение в поле
        for i in args:
            if not(0 <= i <= 5):
                return False
        return True


    if v_h == "h":
        for i in range(1,3):
            if infield(nun[1]+i):
                nun [1] += i
                possible.append(nun)
                nun [1] -= i
        for i in range(1,3):
            if infield(nun[1]-i):
                nun[1] -= i
                possible.append(nun)
                nun[1] += i
        if rand:
            for i in rand_list:
                if infield(nun[0]+i):
                    nun[0] += i
                    possible.append(nun)
                    nun[0] -= i
        else:
            for i in rand_list:
                if infield(nun[0]+i):
                    nun[0] += i
                    possible.append(nun)
                    nun[0] -= i
    elif v_h == "v":
        for i in range(1,3):
            if infield(nun[0]):
                nun[0] += i
                print("nun=",nun)
                possible.append(nun)
                nun[0] -= i
        for i in range(1,3):
            if infield(nun[0]-i):
                nun[0]-=i
                possible.append(nun)
                nun[0]+=i

        if rand:
            for i in rand_list:
                if infield(nun[1]+i):
                    nun[1]+=i
                    possible.append(nun)
                    nun[1]-=i
        else:
            for i in rand_list:
                if infield(nun[1]+i):
                    nun[1]+=i
                    possible.append(nun)
                    nun[1]-=i

    return possible
lk = [3,3]
xxx = find_x( "v", lk)
print (xxx)

pastie.org/p/5dIEz5QAf6titQ0Sm6iKFf
  • Вопрос задан
  • 133 просмотра
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
nun[1]+=i
possible.append(nun)
nun[1]-=i

Это не будет работать, так как append() добавляет ссылку на список, а не его копию.
Попробуй выполнить вот такой код в отдельном файле и убедись
b = []
a = [1, 2, 3]
b.append(a)
b.append(a.copy())
a.append(5)
print(b)  # выведет [[1, 2, 3, 5], [1, 2, 3]]
print(b[0] is a)  # выведет True, так как 0 элемент b - ссылка на a
print(b[1] is a)  # выведет False, так как 1 элемент b - ссылка на отдельный список
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы