Python嵌套列表代码运行原理解析:第4行为何能修改列表值?
Python嵌套列表代码运行原理解析
核心逻辑:列表是「可变对象」,变量存的是引用
- 前两行
a=["a", "1"]、b=["b", "2"]:创建了两个独立的列表对象,a和b只是指向这两个对象的“指针”。 - 第三行
c=[a,b]:不是把a、b的内容复制到c里,而是把a、b指向的列表对象的引用塞进了c。换句话说,c[0]和a指向的是同一个列表,c[1]和b指向的也是同一个列表。 - 第四行
c[0][1]="m":拆解来看,c[0]先拿到a对应的那个列表,然后[1]是取这个列表的第2个元素(Python索引从0开始),把它改成"m"。因为c[0]和a指向同一个列表,所以这次修改直接影响了a的内容。 - 最后打印时,
a就变成了["a", "m"],b不受影响还是["b", "2"]。
关于“未定义列却能修改”的疑问
你觉得的“列”是对二维表格的直观认知,但Python里根本没有「列」这个概念——嵌套列表本质就是列表套列表,外层列表的每个元素是内层列表的引用。c[0][1]不是“第0行第1列”,而是两步操作:先取外层列表的第0个元素(即a对应的列表),再取这个内层列表的第1个元素并修改它。
打个比方:a是个装着两个东西的盒子,c[0]就是打开这个盒子的钥匙,用钥匙改了盒子里的第二个东西,盒子本身(也就是a指向的列表)的内容当然会变。
内容的提问来源于stack exchange,提问作者n_xlade
相关产品推荐
相关产品推荐

