Проблема с массивами в python
Есть простой скрипт на python, который считывает юзеров с файла (1 строка - 1 юзер) и обрабатывает их. В итоге мне нужно получить список юзеров, которых осталось обработать. В примере ниже код упрощён, в оригинальном коде при обработке можно указать количество юзеров, которое нужно обработать, то есть программа проходит базу не до конца, а затем выгружает юзеров, которых осталось обработать. По моей задумке каждый обработанный юзер удаляется из массива, которому перед обработкой присваивается значение массива с полученными юзерами. Вот сам код:
len_base = 0
added_users = 0
cur_users_list = []
result_user_list = []
path = 'base_users.txt'
try:
f = open(path, 'r', encoding='utf-8')
users = f.read()
cur_users_list = users.split('\n')
len_base = len(cur_users_list)
print()
print(f'Найдено пользователей: {len_base}.')
except Exception as e:
print(f'Ошибка чтения файла: {e}.')
cur_position = 1
result_user_list = cur_users_list
for user in cur_users_list:
added_users += 1
print()
print(f'Пользователь {user} успешно обработан.')
print(f'Обработанные пользователи: {added_users}/{len_base}.')
cur_user = user
if cur_user in result_user_list:
result_user_list.remove(cur_user)
cur_position += 1
print()
print(f'Обработано пользователей: {added_users}')
Но этот код проходит только половину юзеров, то есть он обрабатывает только каждого второго. Тут дело в этих строчках с удалением из массива:
cur_user = user
if cur_user in result_user_list:
result_user_list.remove(cur_user)
Почему-то user удаляется и из массива cur_users_list, хотя я его удаляю из ранее созданного массива result_user_list, я даже сделала переменную cur_user, чтобы не использовать user, но результат остался прежним, я не могу понять в чём проблема. У меня ещё есть идея добавлять обработанных юзеров в массив result_user_list, а потом сравнивать его с cur_users_list и оставить только необработанных юзеров, но я хочу разобраться почему такой результат выдаёт текущий код. Вот файл base_users.txt:
Тит
Виктор
Альберт
Игорь
Цицерон
Сергей
Елисей
Жигер
Давид
Люций
Донат
Максим
Эрик
Любомир
Ленар
Жерар
Юрий
Феликс
Михаил
Чеслав
Юрий
Лаврентий
Чарльз
Харитон
Юлий
Тарас
Шерлок
Фёдор
Евгений
Яромир
Ответы (1 шт):
У вас типичная ошибка, которая тут много раз обсуждалась в вопросах. Вы копируете не сам список, а ссылку на него. Поэтому все изменения, которые вы делаете в одном списке тут же отображаются на другом списке - потому что это один список, на который у вас есть две ссылки.
result_user_list = cur_users_list
Чтобы скопировать именно содержимое списка, а не просто ссылку, можно сделать так:
result_user_list = cur_users_list.copy()