2016-03-15 2 views
-1

Это фрагмент моего кодаСписок меняется, когда я не редактировать его

print (stats) 
    print (mstats) 
    stats[1] -= round(dam) 
    print (mstats) 
    print (stats) 

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

Это то, что кодовые выходы:

['One', 142, 27, 0.025, 12, 2.3, 8, 14, ''] 
['One', 142, 27, 0.025, 12, 2.3, 8, 14, ''] 
['One', 133, 27, 0.025, 12, 2.3, 8, 14, ''] 
['One', 133, 27, 0.025, 12, 2.3, 8, 14, ''] 

индекс [1] изменяется от 142 до 133 в обоих списках, когда он должен только в одном. Хотел бы ты помочь мне? Thanks

+0

для дальнейшего чтения: http://nedbatchelder.com/text/names1.html или краткое резюме, см. Мой ответ – Ilja

ответ

2

Возможно, это тот же список с двумя разными именами.

Вы можете проверить это с

print(stats is mstats) 

Это отличается от

print(stats == mstats) 

Прежние показывает вам, что это тот же объект, последний проверяет фактическое содержание, которое может быть таким же, по сосуществованию.

Вы, вероятно, писал ранее что-то вроде

mstats = stats 

, чтобы спасти вас работать, чтобы заполнить. Это не создает новый список, но присваивает тому же старому списку второе имя. Вместо этого вам нужно принудительно скопировать список. Например (Есть, вероятно, еще больше вариантов)

mstats = stats[:] 

или

mstats = 1*stats 

или

mstats = list(stats) 

будет делать.

+1

На мой взгляд, наиболее читаемым способом копирования списка является следующее: 'mstats = list (статистика) ' –

+0

Спасибо, ты был прав. Что означает толстой кишки в первом ответе? (Пожалуйста, напомните мне через пять минут, чтобы пометить ваш ответ, я, вероятно, забуду.) –

+0

чем yot, я отредактировал его как возможность – Ilja

Смежные вопросы