列表分配为[:]

发布于 2021-01-29 19:17:46

之间有什么区别

list = range(100)

list[:] = range(100)

在Python中?

编辑

我应该提到,在该分配列表变量已分配给列表之前:

list = [1, 2, 3]
list = range(100)

要么

list = [1, 2, 3]
list[:] = range(100)
关注者
0
被浏览
43
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    当你做

    lst = anything
    

    您正在将 名称 指向lst一个对象。它不会lst任何方式
    更改用于指向的旧对象,尽管如果没有其他指向该对象的引用,其引用计数将降至零,并且将被删除。

    当你做

    lst[:] = whatever
    

    您正在遍历whatever,创建中间元组,并将元组的每个项目分配给 现有
    lst对象中的索引。这意味着,如果多个名称指向同一个对象,你会看到的变化反映在引用任何名字,就像您使用appendextend或任何其他就地操作。

    差异的一个示例:

    >>> lst = range(1, 4)
    >>> id(lst)
    74339392
    >>> lst = [1, 2, 3]
    >>> id(lst)  # different; you pointed lst at a new object
    73087936
    >>> lst[:] = range(1, 4)
    >>> id(lst)  # the same, you iterated over the list returned by range
    73087936
    >>> lst = xrange(1, 4)
    >>> lst
    xrange(1, 4)   # not a list, an xrange object
    >>> id(lst)   # and different
    73955976
    >>> lst = [1, 2, 3]
    >>> id(lst)    # again different
    73105320
    >>> lst[:] = xrange(1, 4) # this gets read temporarily into a tuple
    >>> id(lst)   # the same, because you iterated over the xrange
    73105320
    >>> lst    # and still a list
    [1, 2, 3]
    

    说到速度,切片分配速度较慢。有关其内存使用情况的更多信息,请参见[PythonSlice分配内存使用)情况。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看