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
jmc891205
V2EX  ›  Python

这段 Python 代码是什么结果?

  •  
  •   jmc891205 · 2017-04-26 21:26:00 +08:00 · 4522 次点击
    这是一个创建于 2757 天前的主题,其中的信息可能已经有所发展或是发生改变。
    l = (1, 2, [3, 4])
    l[2] += [5, 6]
    

    A. l 变为(1, 2, [3, 4, 5, 6])
    B. 抛出 TypeError 异常: "'tuple' object does not support item assignment."
    C. A 和 B 都是
    D. A 和 B 都不是

    24 条回复    2017-07-10 16:42:41 +08:00
    dacapoday
        1
    dacapoday  
       2017-04-26 21:31:48 +08:00
    B
    kindjeff
        2
    kindjeff  
       2017-04-26 21:40:26 +08:00
    我试了, AB 都是。
    weyou
        3
    weyou  
       2017-04-26 21:42:50 +08:00 via Android
    C
    beimingyouyu
        4
    beimingyouyu  
       2017-04-26 21:44:38 +08:00
    C
    HFcbyqP0iVO5KM05
        5
    HFcbyqP0iVO5KM05  
       2017-04-26 21:46:46 +08:00 via Android
    b = l[2]
    b += [7,8]
    bukip
        6
    bukip  
       2017-04-26 21:51:08 +08:00
    AB
    LokiSharp
        7
    LokiSharp  
       2017-04-26 21:54:22 +08:00 via iPhone
    >>> l = (1, 2, [3, 4])
    >>> l[2] += [5, 6]
    Traceback (most recent call last):
    File "<string>", line 1, in <module>
    TypeError: 'tuple' object does not support item assignment
    >>> l
    (1, 2, [3, 4, 5, 6])
    cxyfreedom
        9
    cxyfreedom  
       2017-04-26 22:00:21 +08:00 via iPhone
    C
    WangYanjie
        11
    WangYanjie  
       2017-04-26 22:14:34 +08:00
    A, B 都是
    l[2].append('MeiTiaoZhan')
    mingyun
        12
    mingyun  
       2017-04-26 23:32:42 +08:00
    @director nice
    sunbeams001
        13
    sunbeams001  
       2017-04-27 00:00:51 +08:00
    的确,这样就不报错了
    b = l[2]
    b += [5, 6]
    soratadori
        14
    soratadori  
       2017-04-27 02:23:38 +08:00
    l = (1, 2, [3, 4])
    try:
    l[2] += [5, 6]
    except:
    print(l)
    有点神奇
    NoAnyLove
        15
    NoAnyLove  
       2017-04-27 03:34:10 +08:00
    《 Fluent Python 》有详细解释这个问题
    mapleray
        16
    mapleray  
       2017-04-27 09:35:31 +08:00
    mec
        17
    mec  
       2017-04-27 10:08:29 +08:00
    元组不可变,哪怕这种赋值都不行 l[2] = l[2]。
    jmc891205
        18
    jmc891205  
    OP
       2017-04-27 10:51:16 +08:00
    @NoAnyLove 嘿嘿 就是在看这本书 为了它还买了 Safari Books Online 的订阅 钱包好疼 T_T
    yanzixuan
        19
    yanzixuan  
       2017-04-27 11:49:24 +08:00
    @sunbeams001 你可以 L[2].extend([5,6])
    AkiseAru
        20
    AkiseAru  
       2017-04-27 16:18:13 +08:00
    C 结果[5,6]也被赋值进去了???
    billgreen1
        21
    billgreen1  
       2017-04-28 11:33:18 +08:00
    @jmc891205 我订阅了 leetcode,买了 pycharm, 很想订阅 safari,但是的确贵
    seancheer
        22
    seancheer  
       2017-05-02 17:36:33 +08:00
    我觉得出现这种问题明显是 python 设计的不合理,l[2] += [5, 6];
    这个表达式我个人认为应该为保证“事务的原子性”,而不应该出现上面这种报错了值又被改变了。
    lln133208
        23
    lln133208  
       2017-07-10 10:42:32 +08:00
    @billgreen1 订阅 Pycharm 的?还是之前买的一个固定版本?
    billgreen1
        24
    billgreen1  
       2017-07-10 16:42:41 +08:00
    @lln133208 订阅的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5730 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 50ms · UTC 03:17 · PVG 11:17 · LAX 19:17 · JFK 22:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.