我是一个Python新手,无论在哪里阅读关于列表方法的内容,我都看到一件事情:
切片方法返回一个“新”的列表
这里所说的“新”列表是什么意思?为什么它比改变原始列表更快?
Python是否真的会影响原始列表并且这是否很重要呢?毕竟我无论如何都不会使用它。
我是一个Python新手,无论在哪里阅读关于列表方法的内容,我都看到一件事情:
切片方法返回一个“新”的列表
这里所说的“新”列表是什么意思?为什么它比改变原始列表更快?
Python是否真的会影响原始列表并且这是否很重要呢?毕竟我无论如何都不会使用它。
使用列表,您可以做到:
1)创建新列表(原始列表保持不变):
In [1]: l = [1, 2, 3, 4, 5]
In [2]: l[:3]
Out[2]: [1, 2, 3]
In [3]: l
Out[3]: [1, 2, 3, 4, 5]
2) 在原地修改列表:
In [6]: del l[3:]
In [7]: l
Out[7]: [1, 2, 3]
In [8]: l.append(15)
In [9]: l
Out[9]: [1, 2, 3, 15]
您可以选择哪种方式更适合您的问题。
与列表不同,元组是不可变的,这意味着您可以对它们进行切片,但无法在原地修改它们。
>>> lista = [1, 2, 3, 4]
>>> listb = lista
>>> print lista
[1, 2, 3, 4]
>>> print listb
[1, 2, 3, 4]
>>> lista[0] = 3
>>> print listb
[3, 2, 3, 4]
>>> listc = lista[:]
>>> print listc
[3, 2, 3, 4]
>>> lista[0] = 1
>>> print listc
[3, 2, 3, 4]
listb = lista
时,你并没有创建一个新的列表,而是在同一个列表上添加了一个引用。通过改变lista中的第一个元素来证明这一点,如lista[0] = 3
,这也会改变listb中的第一个元素。然而,当用listc = lista[:]
将lista切片成listc时,你正在复制值。当使用lista[0] = 1
将lista的第一个元素改回1时,listc的第一个元素仍然是3。