Найти - Пользователи
Полная версия: Python 3. Вопрос по работе интерпретатора.
Начало » Python для новичков » Python 3. Вопрос по работе интерпретатора.
1
Sprouttie
Моя задача на примитивном примере:
Исходный список: a=[]
Нужно получить:a=[,,,]
т.е. последовательно менять один из элементов исходного списка на ‘X’ и добавлять каждый полученный список в исходный.
# coding: utf-8
a=[['a','b','c','d']]
b=['a','b','c','d']
for i in range(0,len(b)):
    c=b
    c[i]='X'
    a.append(c)
print(a)
print(b)
полученный результат:
[, , , , ]

Он показывает, что интерпретатор даже список b поменял который вне пределов цикла, потому что видимо с=b, и все четыре новых списка он тоже приравнял к последнему с неправильному, т.к. он постепенно менял и b.
На числовых значениях такого не происходит. Т.е. он не меняет значение b, если я к нему приравняю с, а потом с изменю, b не поменяется.
Вопрос: как мне обойти эту особенность интерпретатора, если он меняет даже то, что вроде менять не должен?
Firik
Попробуйте заменить c=b на
c=b[:]
Sprouttie
Исходный текст моего сообщения
Sprouttie
Да! Получилось, спасибо! Была такая идея, но потратив кучу сил на постижение принципа работы интерпретатора, уже отчаялся получить какой-то результат))). Там у меня более сложный цикл был и долго не мог найти ошибку. Огромное спасибо!
Firik
Вы создавали копию ссылки на список. Мой вариант создает копию значений.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB