有问题的新手,所以请温柔:
list = [1, 2, 3, 4, 5]
list2 = list
def fxn(list,list2):
for number in list:
print(number)
print(list)
list2.remove(number)
print("after remove list is ", list, " and list 2 is ", list2)
return list, list2
list, list2 = fxn(list, list2)
print("after fxn list is ", list)
print("after fxn list2 is ", list2)
Run Code Online (Sandbox Code Playgroud)
这导致:
1
[1, 2, 3, 4, 5]
after remove list is [2, 3, 4, 5] and list 2 is [2, 3, 4, 5]
3
[2, 3, 4, 5]
after remove list is [2, 4, 5] and list 2 is [2, 4, 5]
5
[2, 4, 5]
after remove list is [2, 4] and list 2 is [2, 4]
after fxn list is [2, 4]
after fxn list2 is [2, 4]
Run Code Online (Sandbox Code Playgroud)
我不明白为什么列表在我做的时候正在改变list2.remove(),而不是list.remove().我甚至不确定用什么搜索词来弄明白.
Lev*_*von 14
发生这种情况的原因可以在这里找到:
mlist = [1,2,3,4,5]
mlist2 = mlist
Run Code Online (Sandbox Code Playgroud)
第二条语句"点" mlist2到mlist(即,它们都指的是同一个列表对象),你对其中一个的任何变化也反映在其他.
要制作副本,请尝试此操作(使用切片操作):
mlist = [1,2,3,4,5]
mlist2 = mlist[:]
Run Code Online (Sandbox Code Playgroud)
如果你对切片表示法感到好奇,这个SO问题Python列表(切片方法)将为您提供更多背景知识.
最后,使用list作为标识符不是一个好主意,因为Python已经将此标识符用于其自己的数据结构(这就是我m在变量名称前添加" " 的原因)
这是因为两者list并list2指的是同一个列表,你做了分配之后list2=list.
试试看它们是指相同的对象还是不同的:
id(list)
id(list2)
Run Code Online (Sandbox Code Playgroud)
一个例子:
>>> list = [1, 2, 3, 4, 5]
>>> list2 = list
>>> id(list)
140496700844944
>>> id(list2)
140496700844944
>>> list.remove(3)
>>> list
[1, 2, 4, 5]
>>> list2
[1, 2, 4, 5]
Run Code Online (Sandbox Code Playgroud)
如果你真的想创建的副本list,从而list2不会指向原始清单,但清单的副本,请使用切片运算符:
list2 = list[:]
Run Code Online (Sandbox Code Playgroud)
一个例子:
>>> list
[1, 2, 4, 5]
>>> list2
[1, 2, 4, 5]
>>> list = [1, 2, 3, 4, 5]
>>> list2 = list[:]
>>> id(list)
140496701034792
>>> id(list2)
140496701034864
>>> list.remove(3)
>>> list
[1, 2, 4, 5]
>>> list2
[1, 2, 3, 4, 5]
Run Code Online (Sandbox Code Playgroud)
另外,不要使用list变量名,因为最初list是指类型列表,但是通过定义自己的list变量,您隐藏了list引用类型列表的原始名称.例:
>>> list
<type 'list'>
>>> type(list)
<type 'type'>
>>> list = [1, 2, 3, 4, 5]
>>> list
[1, 2, 3, 4, 5]
>>> type(list)
<type 'list'>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1426 次 |
| 最近记录: |