请选择 进入手机版|继续访问电脑版
发新帖

ll = [].append(1) 会引发的问题

[复制链接]
7630 19

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

                               
登录/注册后可看大图

                               
登录/注册后可看大图

只要打出这行,就会一直这样,然后内存也会一直增加。

举报 使用道具

回复

精彩评论19

ql936611560  新手上路  发表于 2018-4-3 13:16:00 | 显示全部楼层
哪位兄弟来简单解释一下原因啊,是从对象,引用,这方面分析吗,或者是文档

举报 使用道具

回复
roychan  新手上路  发表于 2018-4-3 13:26:12 | 显示全部楼层
append 本身就不返回任何值

举报 使用道具

回复
picture2200  新手上路  发表于 2018-4-3 13:28:04 | 显示全部楼层
会不会是 pycharm 的问题

举报 使用道具

回复
wellsc  注册会员  发表于 2018-4-3 13:34:28 | 显示全部楼层
LL = []
LL.append(1)
print(LL)

举报 使用道具

回复
ql936611560  新手上路  发表于 2018-4-3 13:42:45 | 显示全部楼层
@roychan 应该是这个问题了,所以这是个错误的写法,丢人了

举报 使用道具

回复
ianpeverell  新手上路  发表于 2018-4-3 13:45:02 | 显示全部楼层
>>> ll = [1]
>>> lll = ll.append(1)
>>> lll
>>> ll
[1, 1]

举报 使用道具

回复
noanylove  注册会员  发表于 2018-4-3 13:47:15 | 显示全部楼层
愚人节?

举报 使用道具

回复
laoyur  新手上路  发表于 2018-4-3 13:48:32 | 显示全部楼层
所以内存一直增加是什么鬼

举报 使用道具

回复
zzde  新手上路  发表于 2018-4-3 13:53:56 | 显示全部楼层
愚人节

举报 使用道具

回复
congeec  新手上路  发表于 2018-4-3 14:09:34 | 显示全部楼层
@roychan Python 函数默认返回 None,所有函数都有返回值

举报 使用道具

回复
ql936611560  新手上路  发表于 2018-4-3 14:19:54 | 显示全部楼层
@laoyur 内存真的一直增加了,我猜是 pycharm 的问题了

举报 使用道具

回复
jmc891205  注册会员  发表于 2018-4-3 14:32:16 | 显示全部楼层
这是我讨厌 ide 的原因之一。。。他们为了各种各样“方便”的功能总是在我写 code 的时候背着我做些我不知道的事情。。。

举报 使用道具

回复
roychan  新手上路  发表于 2018-4-3 14:32:18 | 显示全部楼层
@congeec 我表述有误

举报 使用道具

回复
mitt  新手上路  发表于 2018-4-3 14:35:36 | 显示全部楼层
@jmc891205 这跟 ide 似乎无关把 ide 也只是调用了官方的调试器等功能 本身并没有做什么 hack 操作

举报 使用道具

回复
superhan  新手上路  发表于 2018-4-3 14:36:06 | 显示全部楼层
ide 问题 前几天我也碰到了  和代码也没什么关系

举报 使用道具

回复
careofzm  新手上路  发表于 2018-4-3 14:48:35 | 显示全部楼层
https://docs.python.org/3/tutorial/datastructures.html#list-comprehensions
以上是文档,我们摘取 append 部分
```
list.append(x)
Add an item to the end of the list. Equivalent to a[len(a):] = [x].
```
首先: 我们使用[].append 是意味着空的 list 的尾部添加 value,这个是其功能。
然后:文档中给出了样例的,使用[].append[x] 其实等于使用 a[len(a):]=[x],这个操作已经是一个语句了, 但是似乎一个语句包含另一个语句的时候, 还是合理的
```
In [14]: l = l[len(l):]=[x]

In [15]: l
Out[15]: [1, 1]
```
这个现象显然不能解释,于是又看了源码(这个我以后探究一下是什么问题)
```
class list(object):
    """
    list() -> new empty list
    list(iterable) -> new list initialized from iterable's items
    """
    def append(self, p_object): # real signature unknown; restored from __doc__
        """ L.append(object) -> None -- append object to end """
        pass

    def clear(self): # real signature unknown; restored from __doc__
        """ L.clear() -> None -- remove all items from L """
        pass

    def copy(self): # real signature unknown; restored from __doc__
        """ L.copy() -> list -- a shallow copy of L """
        return []

    def count(self, value): # real signature unknown; restored from __doc__
        """ L.count(value) -> integer -- return number of occurrences of value """
        return 0

    def extend(self, iterable): # real signature unknown; restored from __doc__
        """ L.extend(iterable) -> None -- extend list by appending elements from the iterable """
        pass

    def index(self, value, start=None, stop=None): # real signature unknown; restored from __doc__
        """
        L.index(value, [start, [stop]]) -> integer -- return first index of value.
        Raises ValueError if the value is not present.
        """
        return 0

```
源码的中的注释很明显解释了这个问题,就是说在 list 对象中 append, extend, clear 这些方法都是在逻辑完成之后, 实际返回的都是 None。

举报 使用道具

回复
rrfeng  新手上路  发表于 2018-4-3 14:50:10 | 显示全部楼层
lz 是写 js 的吧

我被反向 #想当然# 过...

举报 使用道具

回复
ipwx  新手上路  发表于 2018-4-3 15:01:25 | 显示全部楼层
你可以给 PyCharm 提 issue 了。

举报 使用道具

回复
jmc891205  注册会员  发表于 2018-4-3 15:28:10 | 显示全部楼层
@Mitt ide 不做额外的事情那怎么提供什么自动补全、跨文件查找等等这些功能。。。就像楼主的问题 不就是 PyCharm 更新 index 的功能有问题吗

举报 使用道具

回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表