意外的deque python行为

pro*_*fan 3 python collections deque

为什么在以下作业..

d = deque('abc')
a = d
d.clear()
print a
Run Code Online (Sandbox Code Playgroud)

双端队列([])

返回一个空的双端队列?我希望能保留数据的一个,尽管清除旧的双端队列.

wen*_*zul 5

ad引用相同的对象.所以,如果你clear这样,它将被清除为"两个变量".

您可以通过打印对象的标识来检查.

>>> id(a)
44988624L
>>> id(d)
44988624L
Run Code Online (Sandbox Code Playgroud)

通过赋值复制值只适用于基本数据类型等int.如果处理对象,则必须复制它,因为变量本身只是持有对象的引用.

你可以这样做

d = deque('abc')
a = deque('abc')
Run Code Online (Sandbox Code Playgroud)

或者

>>> import copy
>>> d = copy.copy(a)
Run Code Online (Sandbox Code Playgroud)

结果

>>> id(a)
44988624L
>>> id(d)
44989352L
Run Code Online (Sandbox Code Playgroud)

但随后你会得到两个不同的对象ad使用后,这将是不同的.