Переменные в Python являются ссылки, или имена, а не как переменные в C и т.д.
Этот код:
x=y=Queue()
означает «разрешить имя y
ссылаться на объект в памяти, сделанное по телефону Queue()
, и разрешите имя x
ссылаться на объект, на который указывает y
. " Это означает, что обе переменные относятся к одному и тому же объекту - как вы можете проверить с помощью id(x) == id(y)
.
Этот код:
x=Queue()
y=Queue()
означает «разрешить имя x
ссылаться на один объект сделанный Queue()
, и позволить имя y
ссылаться на другой объект, сделанный Queue()
». В этом случае id(x) == id(y)
является False
Это часто может укусить вас:
a = [1,2,3,4,5]
b = a
b.append(6)
print(a)
# [1,2,3,4,5,6] even though we didn't seem to do anything to a!
Чтобы обойти эту проблему, сделайте import copy; b = a.copy();
вместо b = a
.
Однако такое поведение не происходит непреложные объекты как целые числа:
a = 7
a += 1
Это не перейти к объекту, который a
ссылается и изменить его, добавив к нему один, вместо этого он разыменовывает a
из объекта 7 и ссылается на объект, представляющий предыдущее значение a
+ 1 (то есть 8). Это не похоже на действия, выполняемые на изменяемых объектах, например списки в предыдущем примере - добавление к списку делает изменением объекта, на который ссылается переменная.
Таким образом, мы можем сделать это:
a = 7
b = a
a += 1
print(a)
# 8
print(b)
# 7
Потому что в 'x = y = Queue()' 'x' и' y' являются ссылками на один и тот же объект. –
Также обратите внимание, что 'y.get (10)', вероятно, не то, что вы хотите. Первым параметром ['Queue.get()'] (http://docs.python.org/3.3/library/queue.html#queue.Queue.get) является 'block', который интерпретируется как' bool '. –