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

懵了兄弟们, Python 中的空列表到底是个什么玩意

  •  
  •   Yuan2One · 2022-08-30 20:11:47 +08:00 · 2809 次点击
    这是一个创建于 813 天前的主题,其中的信息可能已经有所发展或是发生改变。

    a = [] b = [] print(id(a)) print(id(b)) 可变对象,输出的相同的,可以理解

    不懂的地方来了,我直接 print(id([])) print(id([])) 输出的是一样的

    但是在第一句打个断点,然后再输出第二句 print(id([])) debug print(id([])) 输出的就不一样了

    有大佬可以解惑一下吗

    9 条回复    2022-08-31 10:29:01 +08:00
    jiangpranay
        3
    jiangpranay  
       2022-08-30 20:49:58 +08:00
    楼上正解。 对象的赋值是引用计数,对象本身 id 一般不一样。
    penguinWWY
        4
    penguinWWY  
       2022-08-30 21:01:11 +08:00   ❤️ 3
    list 生命周期结束的时候会调用 list_dealloc 函数,但并不会立即释放内存。而是存放在对应的 free list 中,如果有新的大小合适的 list 生成则会直接使用,减少内存分配和释放的消耗。

    print(id([])); print(id([]))

    两次分配的 list 是同一个指针,所以 id 相同。debug 模式是通过 trace 实现的,中间有别的 list 生成(或释放),所以没有使用到同一个指针,id 不同
    baleeny
        5
    baleeny  
       2022-08-30 21:08:37 +08:00
    所以为什么`a = [] b = [] print(id(a)) print(id(b)) 可变对象,输出的相同的,可以理解`这个是输出相同的呢,按上面的解释这个不应该相同啊。。
    sunrisewestern
        6
    sunrisewestern  
       2022-08-30 21:33:18 +08:00
    @baleeny 因为输出其实不相同。看 2 楼的结果
    takato
        7
    takato  
       2022-08-31 04:24:42 +08:00
    @baleeny 因为本来就是不一样的。
    ```
    >>> a = []
    >>> b = []
    >>> print(id(a))
    1936663141056
    >>> print(id(b))
    1936663489728
    ```
    meiyoumingzi6
        8
    meiyoumingzi6  
       2022-08-31 10:21:18 +08:00 via iPhone
    你打开了一瓶矿泉水
    我打开了一瓶矿泉水

    你喝完了
    我也喝完了

    现在有人吧两个瓶子混到一块了
    虽然他们看起来一样
    但是那就是两个瓶子啊

    另外,跟断点没的关系
    Yuan2One
        9
    Yuan2One  
    OP
       2022-08-31 10:29:01 +08:00
    @lisongeee 是的,但是没解答为啥 debug 会不一样

    @penguinWWY 多谢,看起来是正确的解释!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3402 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 11:29 · PVG 19:29 · LAX 03:29 · JFK 06:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.