You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python循环外定义字典为何导致列表元素重复?

问题解析:循环外定义字典导致列表元素重复的原因

核心原因:可变对象的引用特性

Python中的字典是可变对象,当你在循环外部定义events_dict = dict()时,整个循环过程中你操作的始终是同一个字典实例:

  • 每次循环修改events_dict的键值对,只是改变这个对象内部的存储数据,并没有创建新的字典。
  • 执行events_list.append(events_dict)时,列表添加的不是字典的副本,而是这个字典对象的引用(相当于指向该字典的“地址”)。

循环结束后,这个唯一的字典实例被最后一次循环的数据覆盖,所以遍历列表时,所有元素显示的都是最后一次修改后的内容——因为它们本质上都是指向同一个字典的引用。

解决思路的原理

把字典定义放到循环内部(for event in events: events_dict = dict()),每次循环都会创建一个全新的字典实例。此时添加到列表的是不同字典对象的引用,每个引用指向的都是独立的、存储着对应循环数据的字典,自然不会出现重复问题。

修改后的代码示例

import requests
from bs4 import BeautifulSoup

url = 'https://www.python.org/events/python-events/'
req = requests.get(url)
soup = BeautifulSoup(req.text, 'html.parser')

events = soup.find('ul', {'class': 'list-recent-events'}).findAll('li')

events_list = []

for event in events:
    # 每次循环创建新的字典实例
    events_dict = dict()
    events_dict['name'] = event.find('h3').find("a").text
    events_dict['location'] = event.find('span', {'class': 'event-location'}).text
    events_dict['time'] = event.find('time').text
    events_list.append(events_dict)

for items in events_list:
    print(items)

内容的提问来源于stack exchange,提问作者ZeinabBanayazdi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 15:35:40