为了账号安全,请及时绑定邮箱和手机立即绑定

list.clear()与list = []有何不同?

list.clear()与list = []有何不同?

青春有我 2021-04-02 14:15:18
该功能的预期目标foo是将作为参数提供的数字添加到列表中,如果该数字为0,则重置列表。首先我写了这个程序:def foo(n, bar = []):    if n == 0:        bar = []        print("list empty")    else:        bar.append(n)        for y in bar:            print(y, end=', ')        print()foo(5)foo(3)foo(0)foo(6)输出:5, 5, 3, list empty5, 3, 6, 但看起来却被bar = []忽略了。然后我改变bar = []了bar.clear(),它按照我的想法工作:def foo(n, bar = []):    if n == 0:        bar.clear()        print("list empty")    else:        bar.append(n)        for y in bar:            print(y, end=', ')        print()foo(5)foo(3)foo(0)foo(6)输出:5, 5, 3, list empty6,我不明白,为什么bar.clear()从工作differntlybar = []自clear()应从集合中删除所有元素。所以做同样的事情bar = []。编辑:我不认为我的问题是“最低惊讶”和可变默认参数的重复,我知道默认值仅计算一次。(来自官方教程)但是我要问的是,为什么bar = []不编辑(在这种情况下是清除的)列表,而附加和清除的是呢?
查看完整描述

4 回答

?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

bar = [] 重新绑定 bar; 它创建一个全新的empty list,并将其绑定到该名称bar。没关系bar,以前没关系。它可能是一个int,一个tuple,或者dict,它现在是无关紧要的,因为它现在已经绑定到一个全新的list。旧的绑定不再存在于当前方法调用中,但原来的绑定list 仍然作为default参数的值存在foo(请注意:由于这种混乱,可变默认值被认为是令人惊讶且丑陋的)。

bar.clear()呼吁的方法存在的 list,它告诉list清除本身(对什么没有影响bar是指,它最好是一些clear方法,但除此之外,它不是真正需要的,这是一个list)。因为它是在 bar您开始使用(引用的函数默认缓存相同可变默认值),会影响你未来的电话(因为bar继续指list你为可变默认提供)。


查看完整回答
反对 回复 2021-04-20
?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

这里的代码bar是对内存中某些列表的引用。使用时bar = [],变量bar将与新的(空)列表关联。使用时 bar.clear(),您将修改当前列表。

一般来说,这意味着Python中的列表是通过引用而不是通过值传递的。您可以在此处了解更多信息。


查看完整回答
反对 回复 2021-04-20
?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

当执行a时list.clear(),列表将被清除:-)当执行a时list = [],列表将被新的空列表覆盖。

所不同的是,如果某项内容在被覆盖之前已经在引用列表,那么它仍将引用您认为现在已经清除的值。

这是引入极难调试的错误的绝妙方法。


查看完整回答
反对 回复 2021-04-20
?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

假设您有一个包含一些值的列表,并将其分配给名为foo的变量。


foo = [0, 1]

现在,此变量指向内存中的此列表。


假设您然后创建一个名为bar的新变量并分配给foo。


bar = foo

现在,这两个变量指向内存中的同一列表对象。如果然后更改foo并使它等于[],bar会发生什么?


foo = []

bar == [0, 1] # True

现在,让我们对foo.clear()进行相同的操作。


foo.clear()

bar == [] # True

这是因为在列表上使用clear方法会清除该列表对象,这会影响引用该对象的所有内容,而将变量分配给空列表只会更改该变量的内容,而不会更改任何原始列表。


查看完整回答
反对 回复 2021-04-20
  • 4 回答
  • 0 关注
  • 350 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信