#python #html
Вопрос:
def scraping():
old_items_list = items_list
x = 0
for item in items:
item_price = item.find("span", {"class": "price-text-E1Y7h text-text-LurtD text-size-s-BxGpL"})
item_url_container = item.find("div", {"class": "iva-item-titleStep-_CxvN"})
item_url = item_url_container.a["href"]
item_name_container = item.find("h3", {"class": "title-root-j7cja iva-item-title-_qCwt title-listRedesign-XHq38 title-root_maxHeight-SXHes text-text-LurtD text-size-s-BxGpL text-bold-SinUO"})
item_name = item_name_container.text
items_list[x] = item_url
x = 1
print(items_list)
if items_list == old_items_list:
return True
if items_list != old_items_list:
print('found difference')
new_items_list = list(set(old_items_list).difference(items_list))
print(new_items_list)
for item in new_items_list:
print(item)
items_list = [1,2,3]
while True:
scraping()
print('HUH??')
sleep(3)
Я не понимаю, почему код отображается таким образом, но я надеюсь, что он читаем. Я не упоминаю old_items_list нигде, кроме начала функции, но он все равно меняет свои свойства по мере выполнения функции
Комментарии:
1. Для уценки Stackoverflow требуется 4 пробела для начала блока кода. Это означает, что если вы хотите сделать отступ в 4 пробела, вам нужно сделать отступ в 8 пробелов в редакторе. Вернитесь и начните добавлять 4 пробела к тем строкам, которые вы хотите сделать отступом, и вы увидите, что они начинают выглядеть правильно в отображаемом коде.
2. У вас там много кода, когда на самом деле вас просто волнует обновление списка для этого вопроса. Можете ли вы упростить? Я вижу
old_items_list = items_list
— это не копирует список. Это означает только то, что эти две переменные ссылаются на один и тот же список.3.
old_items_list = items_list.copy()
должно сработать. Как отметил @tdelaney, обе переменные ссылаются на один и тот же список.4. Спасибо всем вам!!! Решенный. Нужно ли мне удалять сообщение?
5. Молшейп отвечает на ваш вопрос? Если это так, примите это вместо удаления.
Ответ №1:
old_items_list = items_list
создает ссылку на items_list
. Вы ищете что-то вроде этого:
original_list = [1, 2, 3]
reference_list = original_list
old_list = original_list.copy()
print(original_list)
original_list.append(4)
print(reference_list)
print(old_list) # this is what you are looking for
Используйте .copy()
метод из своего списка, чтобы создать копию исходного списка.
Комментарии:
1. Спасибо! Очень признателен
Ответ №2:
В большинстве распространенных языков при назначении переменных вы назначаете ссылки, на которые указывает значение этой переменной (например, указатели памяти в ссылках на кучное пространство C или java).
Итак, вы можете представить себе предложение «old_items_list = items_list» так же, как:
- параметр memory_reference имеет значение [x,y,z]
- items_list указывает на memory_reference,поэтому значение является значением,связанным с memory_reference (как мы уже говорили ранее [x, y, z]).
- old_items_list указывает на items_list, поэтому обе переменные указывают на одну и ту же ссылку на значения, поэтому мы ссылаемся на одни и те же экземпляры
Чтобы не иметь одинаковых ссылок, вы можете:
- Выполните копирование для каждого элемента или в списке, если переменные являются неизменяемыми
- Сериализуйте список и десериализуйте его снова в новой переменной, чтобы одни и те же значения указывали на разные места.