lz24xg
V2EX  ›  Python

Python 列表赋值 BUG

By lz24xg at 2022 年 10 月 19 日 · 2470 次点击

s = [1,2,3,4,[5,5,5,5]] candle = {'h':9, 'l':7, 'c':6}

print(s[-2:]) s[-1][2] = candle['h'] s[-1][3] = candle['l'] print(s[-2:]) s.append(s[-1]) print(s[-2:]) s[-1][2] = candle['c'] s[-1][3] = candle['c'] print(s[-3:])

输出: [4, [5, 5, 5, 5]] [4, [5, 5, 9, 7]] [[5, 5, 9, 7], [5, 5, 9, 7]] [4, [5, 5, 6, 6], [5, 5, 6, 6]]

我改了 list 最后一个元素的值,因为后 2 个元素是相同的值,所以倒数第 2 个也被修改了?这是 Python 的 BUG 吗?

9 条回复  •  2022-10-19 15:20:08 +08:00
ranleng
   1
ranleng  
   2022 年 10 月 19 日
代码看的头疼,
大概率是同一个对象导致的
learningman
   2
learningman  
   2022 年 10 月 19 日
请自行复习 值与引用
lizytalk
   3
lizytalk  
   2022 年 10 月 19 日
s.append(s[-1])之后,s 中的后两个元素指向的是相同的 list 对象
superrichman
   4
superrichman  
   2022 年 10 月 19 日
你 append 的是一个指针,s[-1]和 s[-2]都指向同一个 list 。改成 s.append(s[-1] * 1) 创建一个新的对象
huangzhe8263
   5
huangzhe8263  
   2022 年 10 月 19 日
use reference 和 use value 的问题

记得有一个可视化这个问题的网站,我去翻翻
lz24xg
   8
lz24xg  
OP
   2022 年 10 月 19 日
感谢,解决了
TimePPT
   9
TimePPT  
   2022 年 10 月 19 日
In [1]: s = [1,2,3,4,[5,5,5,5]]

In [2]: candle = {'h':9, 'l':7, 'c':6}

In [3]: s[-1][2] = candle['h']

In [4]: s[-1][3] = candle['l']

In [5]: s.append(s[-1])

In [6]: s[-1][2] = candle['c']

In [7]: s[-1][3] = candle['c']

In [8]: for i in s:
...: print(f"{i=}, {type(i)=}, {id(i)=}")
...:
i=1, type(i)=<class 'int'>, id(i)=4549804272
i=2, type(i)=<class 'int'>, id(i)=4549804304
i=3, type(i)=<class 'int'>, id(i)=4549804336
i=4, type(i)=<class 'int'>, id(i)=4549804368
i=[5, 5, 6, 6], type(i)=<class 'list'>, id(i)=4582898496
i=[5, 5, 6, 6], type(i)=<class 'list'>, id(i)=4582898496
推荐学习书目
› Learn Python the Hard Way
Python Sites
› PyPI - Python Package Index
› http://diveintopython.org/toc/index.html
› Pocoo
值得关注的项目
› PyPy
› Celery
› Jinja2
› Read the Docs
› gevent
› pyenv
› virtualenv
› Stackless Python
› Beautiful Soup
› 结巴中文分词
› Green Unicorn
› Sentry
› Shovel
› Pyflakes
› pytest
Python 编程
› pep8 Checker
Styles
› PEP 8
› Google Python Style Guide
› Code Style from The Hitchhiker's Guide
© 2026 V2EX · 43ms · 3.9.8.5