【问题标题】:Why do my_list[None:] and my_list[:None] return my_list? [duplicate]为什么 my_list[None:] 和 my_list[:None] 返回 my_list? [复制]
【发布时间】:2016-10-04 04:40:59
【问题描述】:

我今天正在编写一个函数来做到这一点:

def foo(n=None):
    my_list = generate_some_data()
    return my_list if n is None else my_list[:n]

所以我想知道如果 nNone 而我是 my_list[:n] 会发生什么。于是我打开了一个 REPL 发现了这个:

Python 3.5.1 (v3.5.1:37a07cee5969, Dec  6 2015, 01:54:25) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> my_list = [1, 2, 3, 4, 5, 6]
>>> my_list
[1, 2, 3, 4, 5, 6]
>>> my_list[:4]
[1, 2, 3, 4]
>>> my_list[:None]
[1, 2, 3, 4, 5, 6]
>>> my_list[None:]
[1, 2, 3, 4, 5, 6]
>>> my_list[None:None]
[1, 2, 3, 4, 5, 6]

这是为什么?索引None 无关紧要甚至不会引发错误的幕后情况是什么?

【问题讨论】:

标签: python python-3.x


【解决方案1】:

因为my_list[:] 创建了列表的副本。 my_list[:None]my_list[None:]myList[None:None] 等价于 my_list[:]

这个 iPython 会话应该显示我在说什么:

In [73]: myList = [1, 2, 3]

In [74]: myListReference = myList

In [75]: myList is myListReference
Out[75]: True

In [76]: myList == myListReference
Out[76]: True

In [77]: myList is myList[:]
Out[77]: False

In [78]: myList == myList[:]
Out[78]: True

In [79]: myList is myList[:None]
Out[79]: False

In [80]: myList == myList[:None]
Out[80]: True

这称为“浅拷贝”运算符。这允许您在不修改原始列表的情况下修改列表的副本。

【讨论】:

    猜你喜欢
    • 2020-11-16
    • 2013-11-13
    • 2017-10-24
    • 2018-11-29
    • 1970-01-01
    • 2013-08-14
    • 2012-05-27
    • 1970-01-01
    相关资源
    最近更新 更多