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

Python中for循环修改列表元素的差异问题咨询

Python中for循环修改列表的差异解析

案例1:嵌套列表被修改

user_data_list = [['Full Name', ' Email Address'],['Blossom Gill', ' blossom@abc.edu'],
                  ['Hayes Delgado', ' nonummy@utnisia.com'], ['Petra Jones', ' ac@abc.edu'],
                  ['Oleg Noel', ' noel@liberomauris.ca']]
old_domain_email_list = ['blossom@abc.edu','ac@abc.edu']
new_domain_email_list = ['blossom@xyz.edu','ac@xyz.edu']
for user in user_data_list[1:]:
    for old_domain, new_domain in zip(old_domain_email_list, new_domain_email_list):
        if user[1] == ' ' + old_domain:
            user[1] = ' ' + new_domain
print(user_data_list)

运行结果:

[['Full Name', ' Email Address'], ['Blossom Gill', ' blossom@xyz.edu'], ['Hayes Delgado', ' nonummy@utnisia.com'], ['Petra Jones', ' ac@xyz.edu'], ['Oleg Noel', ' noel@liberomauris.ca']]

案例2:一维列表未被修改

my_list = ['a','b','c','d']
old_my_list = ['b','d']
new_my_list = ['repalce_1','repalce_2']
for i in my_list:
    for old_, new_ in zip(old_my_list,new_my_list):
        if i == old_:
            i= new_
print(my_list)

运行结果:

['a', 'b', 'c', 'd']

差异原因解析

这两个案例的本质区别在于Python中可变对象与不可变对象的特性,以及变量引用的操作逻辑:

  1. 案例1的逻辑
    user是user_data_list中嵌套子列表的直接引用,而列表属于可变对象。当执行user[1] = ' ' + new_domain时,并没有给user变量重新赋值,而是直接修改了user指向的那个子列表的内部元素。由于user和原列表中的子列表是同一个对象,所以原列表会同步反映出这个修改。

  2. 案例2的逻辑
    i是从my_list中取出的字符串元素,字符串属于不可变对象。当执行i = new_时,只是将i这个变量重新指向了一个新的字符串对象,并没有修改原列表中原来的字符串元素。原列表里的元素还是最初的那些字符串对象,因此打印原列表时不会看到变化。

简单总结:

  • 可变对象(如列表)可以直接修改内部内容,修改会影响所有指向它的引用;
  • 不可变对象(如字符串、数字)无法修改自身,只能让变量指向新对象,不会改变原列表中的旧元素。

内容的提问来源于stack exchange,提问作者Mr-thanh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 08:55:17