-
我把一个嵌套的字典拷贝了一份、想改副本而不动原件,结果一改副本里层的数据、原件竟然也跟着变了,排查半天才发现我用的拷贝只复制了最外层、里面那层还是和原件共享的同一个对象的深度复盘
我有个嵌套的数据结构(字典里的值又是列表/字典),要在不影响原件的前提下拷一份出来改改。我很自然用 copy()(或切片 [:]、dict(原件))拷了一份,心想这下副本和原件就是两份独立数据了,随便改副本原件纹丝不动。可改着改着诡异的事发生了:我明明只改了副本里嵌套那层的数据,一回头原件里对应那层也跟着变了。我盯着代码反复看,怀疑哪里引用串了、别处偷偷改了原件,查半天没头绪。直到深究 copy(…- 3
- 0
-
我用乘法快速初始化了一个二维列表,给其中一个格子赋值,结果发现每一行的那个格子都跟着变了:一次 Python 列表乘法复制的是引用而非副本的深度复盘
我要初始化一个 3×3 的二维列表,图省事用了乘法 grid = [[0]*3]*3,打印出来 [[0,0,0],[0,0,0],[0,0,0]] 看着完全正确。可当我 grid[0][0]=1 时,grid 变成了 [[1,0,0],[1,0,0],[1,0,0]]——明明只改了第 0 行第 0 列,每一行的第 0 列都变成了 1。打印 id 才看明白:列表的 *3 复制的是引用而不是副本,它把…- 0
- 0
-
一段用浅拷贝复制配置模板的 Python 代码,我改了副本里的一个嵌套列表,结果把原始模板和其他所有副本一起改了:一次浅拷贝陷阱的深度复盘
基于一个嵌套配置模板生成多份各自独立的配置,用 copy.copy 复制后改一份,结果原模板和其他所有副本里的那个嵌套列表全跟着变了。根因是 copy.copy/dict.copy/list[:] 都是浅拷贝:只复制最外层容器,里面嵌套的 list/dict 复制的只是引用、和原来共享同一个对象,改副本的嵌套对象其实改的是大家共享的那一个。本文讲透浅拷贝与深拷贝、Python 变量是引用的本质,给…- 3
- 0
-
我写了个函数给参数设了个空列表默认值,第二次调用时却发现里面莫名其妙带着上一次的数据,我对着 Python 可变默认参数在定义时只创建一次被所有调用共享这个坑排查大半天的复盘
一个堪称 Python 头号经典陷阱的坑,几乎每个 Python 程序员都会栽一次,诡异在出问题的函数每次调用代码一模一样、行为却随调用次数改变,仿佛函数有记忆。写了个给篮子添加物品的函数,为了不传篮子时就新建空篮子,很自然给参数设了 [] 默认值:def add_item(item, basket=[]): basket.append(item); return basket。第一次 add_i…- 0
- 0
-
我用 [[0]*m]*n 飞快地建了个二维数组,往里填一个格子的值,结果整整一列都跟着变了,我对着 Python 列表乘法复制的是引用而不是值这个坑排查大半天的复盘
一个看着人畜无害、却让我对着输出怀疑大半天人生的 Python 坑。需求很普通:做一个棋盘/网格小算法,要一个 n 行 m 列、初始全 0 的二维数组。凭着对 Python 简洁的信赖,我顺手写下自以为最 Pythonic 的一行 grid = [[0]*m]*n,打印出来 [[0,0,0,0],...] 完美。然后往左上角填值 grid[0][0]=1,结果打印发现三行的第一个都变成 1 了!我…- 0
- 0
-
我在 Python 里拷贝了一个嵌套列表,以为是独立副本,结果改副本的内层元素原列表也跟着变了,我对着浅拷贝只复制一层排查了大半天的复盘
我有个嵌套列表(列表套列表),想要份独立副本来改、不影响原始数据,顺手用了切片 original[:](也试过 list()、copy.copy)。可一改副本的内层元素,原始列表的内层也跟着变了——副本好像只独立了一半。深挖才懂是浅拷贝只复制了最外层:original[:] 创建了一个新的外层列表,但里面装的每个内层元素仍然是和原列表共享的同一个对象引用,copy[0] is original[0…- 0
- 0
引用
幸运之星正在降临...
点击领取今天的签到奖励!
恭喜!您今天获得了{{mission.data.mission.credit}}积分
我的优惠劵
-
¥优惠劵使用时效:无法使用使用时效:
之前
使用时效:永久有效优惠劵ID:×
没有优惠劵可用!





![我用 [[0]*m]*n 飞快地建了个二维数组,往里填一个格子的值,结果整整一列都跟着变了,我对着 Python 列表乘法复制的是引用而不是值这个坑排查大半天的复盘](https://blog.biekanle.com/wp-content/uploads/thumb/2026/06/fill_w526_h326_g0_mark_manual_458_cover.webp)
