切片与正常分配

时间:2014-08-24 09:13:13

标签: python list slice

我偶然发现UserList的实现,似乎不明白为什么在__init__()方法中,切片分配和正常分配都用于设置给定的初始列表。这是code

class UserList(collections.MutableSequence):
    def __init__(self, initlist=None):
        self.data = []
        if initlist is not None:
            # XXX should this accept an arbitrary sequence?
            if type(initlist) == type(self.data):
                self.data[:] = initlist
            elif isinstance(initlist, UserList):
                self.data[:] = initlist.data[:]
            else:
                self.data = list(initlist)

为什么在分配初始列表时会使用self.data[:]self.data

1 个答案:

答案 0 :(得分:2)

你是对的,代码多余的。但它不是在2000年的Jeremy Hylton made the change

现在切片分配采用任何序列类型,但该功能仅在Python 2.3中添加(具体来说,是Alex Martelli added support for any type to be used)。

因此,在编写代码时,使用切片分配而不是创建新的列表对象是完全合理的,但前提是您有一个实际可以在右侧使用的对象作业。切片分配是一种快速有效的复制列表内容的方法。