Список Python, добавляемый, если на него нет (прямой ссылки) - PullRequest
0 голосов
/ 03 октября 2018

Хорошо, это всего лишь грубый код, который я написал, пытаясь сделать Guess Who (TM) для проверки класса, и я хотел сделать функцию генератора случайных символов (это всего лишь подтверждение концепции, и я бы ее расширил).сложность позже! Пожалуйста, не судите!).Однако список возможностей шаблона персонажа, кажется, добавляется к каждой итерации (и, таким образом, искажает мои другие циклы), когда этого не следует делать.Следует добавлять элемент в конец каждого нового сгенерированного списка, а не шаблон.Тем не менее, переменная шаблона не добавляется в код, а должна быть только временная копия.Вот код:

tempfeatures = characters = []
for i in range(len(characternames)):
    tempfeatures = []
    charactername = characternames[random.randint(0,len(characternames)-1)]
    characternames.remove(charactername)
    a = features
    tempfeatures = a
    ### "Debug bit" ###
    print(features)
    print("loooooop")
    for y in range(len(features)):
        print(len(features))
        temp = random.randint(0,1)
        if temp == 1:
            tempfeatures[y][1] = True
        else:
            tempfeatures[y][1] = False
    tempfeatures.append(["Dead",True])
    characters.append([charactername,tempfeatures])
print(characters)

Спасибо!

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

Это называется мелкой копией, она просто ссылается на список с другой переменной, как показано здесь: https://docs.python.org/2/library/copy.html
Вам необходимо сделать и независимую копию, или глубиной копировать, как: tempfeature = list(feature), поэтому изменение tempfeature не помешает feature

0 голосов
/ 03 октября 2018

Очевидно, что переменная tempfeature - это «вызов по ссылке», а не «вызов по значению».- спасибо python.

Так что при дублировании списков нужно использовать это в конце имени переменной

tempfeature = feature[:]

( [:] bit)

Спасибо всем за ваши комментарии!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...