V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
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
fayefang
V2EX  ›  Python

tuple 中的 list 元素为什么能这样被修改?

  •  
  •   fayefang · 2018-09-21 16:01:29 +08:00 · 2272 次点击
    这是一个创建于 2259 天前的主题,其中的信息可能已经有所发展或是发生改变。

    先定义一个 tuple 元素 t = ('a', 'b', ['A', 'B']) 然后代码如下: list = t[2]; list[0] = 'OHOH'; print t; list[1] = 'OHOH'; print t;

    输出结果: ('a', 'b', ['OHOH', 'B']) ('a', 'b', ['OHOH', 'OHOH'])

    问题:这里明明是把 t[2]取出来赋值给了 list,按说无论怎么修改 list,修改的只是 list 的值,并不会影响 t 中的 list 值,但事实是确实影响了,为什么?

    9 条回复    2018-09-22 11:05:52 +08:00
    xxxy
        1
    xxxy  
       2018-09-21 16:06:34 +08:00
    python 日经贴。可以了解下 python 的 object 引用
    fayefang
        2
    fayefang  
    OP
       2018-09-21 16:17:18 +08:00 via iPhone
    @xxxy 学到了,刚明白,感谢🙏🏻
    401Li
        3
    401Li  
       2018-09-21 17:41:09 +08:00 via Android
    流畅的 Python 里说过,指向同一个内存空间
    thinker3
        4
    thinker3  
       2018-09-21 22:14:15 +08:00
    你还修改了 list 本身
    anonymous256
        5
    anonymous256  
       2018-09-21 23:33:24 +08:00 via Android
    1. 虽然楼主已经知道,还是自作多情解释一下: python 与 C/C++/Golang 有个明显的不同是: 它不允许程序员选择传值或者传址(或者说传引用、传指针)。Python 采用的参数传递采用是"传对象引用": 如果一种不可改变对象,如 str, int, float 等,那么它无法被修改,相当于传值; 另一种是可改变对象,list, dict,那么它总是会修改,相当于传址。
    2. list 是内建类型,不建议作为变量名。
    fayefang
        6
    fayefang  
    OP
       2018-09-22 06:51:38 +08:00 via iPhone
    @401Li 是的,正如如一楼所说,主要是 python 中的 list 的指针指向不变性导致的
    fayefang
        7
    fayefang  
    OP
       2018-09-22 06:52:18 +08:00 via iPhone
    @401Li 哦哦🙏🏻
    fayefang
        8
    fayefang  
    OP
       2018-09-22 06:55:21 +08:00 via iPhone
    @anonymous256 嗯嗯,解释的很详细了,太感谢了🙏🏻
    tanglijun
        9
    tanglijun  
       2018-09-22 11:05:52 +08:00
    修改了 list 指向而已,实际上并没有改变
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1930 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 16:23 · PVG 00:23 · LAX 08:23 · JFK 11:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.