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

为什么Python中old_items_list未被修改却与items_list值相等?

问题原因说明

这个现象是Python可变对象的引用传递特性导致的:
列表属于可变对象,你执行old_items_list = items_list赋值时,并没有生成新的独立列表,只是给同一块内存地址的列表对象绑定了两个不同的变量名。后续你修改items_list[x]的操作是直接修改该内存地址中存储的内容,old_items_list因为指向同一块内存,读取到的内容自然会和items_list同步变化,所以二者的相等判断始终为真。

修复方案

你只需要在赋值时对原列表做拷贝,让old_items_list指向独立的内存地址即可,根据你的使用场景可选两种方案:

  • 若列表中仅存储字符串、数字等不可变元素,使用浅拷贝即可:
    将old_items_list = items_list替换为以下任意一种写法:
    old_items_list = items_list.copy()
    # 或者
    old_items_list = items_list[:]
    
  • 若列表中嵌套了子列表、字典等其他可变对象,需要使用深拷贝:
    先导入copy标准库,再做深拷贝操作:
    import copy
    old_items_list = copy.deepcopy(items_list)
    
额外注意事项

你当前代码中直接通过items_list[x] = item_url赋值的写法存在索引越界风险:如果新抓取到的item数量超过了items_list的原有长度,会直接抛出索引错误。建议改为每次迭代先生成新的空列表,将抓取出的url逐个append进去,最后再赋值给items_list,逻辑会更安全。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 04:48:04