Python3 list.pop()vs slice

Python3 list.pop()vs slice,python,python-3.x,list-comprehension,Python,Python 3.x,List Comprehension,鉴于: l=[1,2,3,4,5] < > >代码> L.POP(0)和 L= L[1:] /代码>如果我们只考虑最终代码状态>代码> L/COD>?< /P> 在我看来,l的内容应该是相同的,无论我选择哪个选项,简单的测试似乎都显示了相同的内容,但我有一段代码,它根据我使用的操作表现出不同的行为 我正在使用来自Anaconda的Python 3.6.7 编辑:代码示例: forward=范围(10) 向后=向前[:-1] 部分=[] f_p=[] b_p=[] 对于拉链中的f、b(向前、向后

鉴于:

l=[1,2,3,4,5]
< > >代码> L.POP(0)和<代码> L= L[1:] /代码>如果我们只考虑最终代码状态>代码> L/COD>?< /P>
在我看来,
l
的内容应该是相同的,无论我选择哪个选项,简单的测试似乎都显示了相同的内容,但我有一段代码,它根据我使用的操作表现出不同的行为

我正在使用来自Anaconda的Python 3.6.7

编辑:代码示例:

forward=范围(10)
向后=向前[:-1]
部分=[]
f_p=[]
b_p=[]
对于拉链中的f、b(向前、向后):
如果len(f_p)==3:
附加部分((f_p,b_p))
f#p=f#p[1:][f#p.pop(0)
b#p=b#p[1:][b#p.pop(0)
f_p.追加(f)
附录(b)
印刷品(部分)
为什么结果不同


另外,我知道
pop()
返回元素,但我目前只关心列表本身。

如果您只是尝试打印结果,您将看到结果:

l = [1,2,3,4,5]
print (l.pop(0)) # 1: The method returns the removed item
print (l) # [2, 3, 4, 5] # list after removing item
l = [1,2,3,4,5]
print (l[1:]) # [2, 3, 4, 5] # new list with starting integer where the slicing of the object starts
l.pop(0)
:pop()方法从列表中删除给定索引处的项。该方法还返回已删除的项,在您的示例中,返回1,如何查看是否使用pop()打印list afret您的列表不再包含thet元素


l[1::
:slice()构造函数创建一个slice对象,表示由range(开始、停止、步骤)指定的一组索引,在您的示例中,您得到了一个带有起始整数的新列表,其中对象的切片开始

主要区别是一个是按值调用,另一个是按引用调用。 pop会影响原始列表,而切片只有在您明确将其设置为

def test_pop(ls):
    return ls.pop(0)
def test_slice(ls):
    return ls[1:]

l = [1,2,3,4,5]

print(l) #[1, 2, 3, 4, 5]
test_slice(l)
print(l) #[1, 2, 3, 4, 5] doesn't effect the original list
test_pop(l)
print(l) #[2, 3, 4, 5] effects the original list

l.pop
修改列表,而
l[1:][/code>返回一个新列表,您恰好将该列表分配给同一个变量。“我有一段代码,它根据我使用的操作的不同行为”。。。那是什么代码?你确定你读过的文档吗
s.pop([i])
检索
i
处的项,并将其从
s
中删除另一件事:范围。pop在适当的位置修改列表。如果在作为参数传递的列表上的函数中使用pop,它将修改原始列表。您的第二个操作将创建该操作的本地副本。这两个操作也有不同的功能。代码的不同行为是什么?它可能与这个事实有关吗?两个列表的内容及其顺序在两种情况下都是相同的,这就是我在问题中所说的。我的问题:这些列表之间有什么不同?