即使在完成不同的操作时,python中的double赋值也会生成相同的列表。为什么?

时间:2016-05-25 00:44:01

标签: python

我面临的情况是我无法破解背后的逻辑。

我有一段代码

user_id = user_email = []
for id, email in users: 
    # users is a tuple of tuples that looks like ((a,b),(c,d)...)
    user_id.append(id)
    user_email.append(email)

当我查看结果时,我发现user_id == user_email

当我单独分配时,我可以正确获取ID和电子邮件,而不是包含id和电子邮件的两个相同列表

我只是想知道双重分配背后的逻辑是什么以及导致这种现象发生的原因。

2 个答案:

答案 0 :(得分:2)

设置

user_id = user_email = []

您将user_id和user_email链接到一个列表。当列表改变时,两个变量都会改变。

分别设置这些变量。

User_id = []
User_email = []

如果来自C语言,这可能会让人感到困惑。将python中的变量视为名称而不是变量。

This is so incredibly helpful

答案 1 :(得分:1)

以下是对正在发生的事情的解释:

>>> a = b = []
>>> c = []
>>> id(a)
41002688
>>> id(b)
41002688
>>> id(c)
41023328

请注意,ab都有相同的ID,但c有不同的ID - 因为ab指向同样的清单。