python - 编程: basic python assignment

标签 python

为什么 y 不打印空字典?

x = {}
y = x
print y
x['key'] = 'value'
print y
x = {}
print x,y

结果:

{}
{'key': 'value'}
{} {'key': 'value'}

最佳答案

首先你必须明白:

  • 每当您在代码中说出 {} 时,Python 都会创建一个新字典。它基本上是 dict() 的更短语法。

  • Python 中的变量并不是真正的变量,它们只是名称。您可以将它们视为附加到值上的标签,类似于商店中的价格标签。这意味着您可以随意移动它们,并且对象本身不会改变。

<小时/>

让我们看一下代码中有意义的行:

x = {}
y = x
x['key'] = 'value'
x = {}

线路:

  1. x = {}:我们使用 {} 创建一个新的字典,然后设置名称 x 来引用该字典新词典。
  2. y = x:这里我们将名称y设置为指向现有的字典,该字典已经标记了名称x它。该字典现在有两个名称。请注意,y 指向实际的字典,并且它不关心名称x 是否更改为指向其他内容。与商店中的价格标签类似,您可以移动其中一个而无需触摸另一个
  3. x['key'] = 'value':只需将一个项目添加到 x 指向的字典中即可。这也可以是 y['key'] = 'value' 并且输出将完全相同,因为 xy 已附加到同一个字典。
  4. x = {}:注意 {},这意味着我们正在创建一个新字典!我们还设置名称 x 指向这个新字典 - 保持原始字典和名称 y 不变,因此 y 仍然引用包含项目的原始字典。

这就是代码的结尾,现在打印 x 将输出一个空字典(第 4 行),但 y 仍然指向原始字典。

关于python - 编程: basic python assignment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30712256/

相关文章:

python - 从扫描图像中识别手写数字

python - 加速 GPU 与 CPU 矩阵运算

python - 为什么 Django 不重置 SQLite3 中的序列?

python - 基于列值拆分/扩展数据框

python - 将数据框列从字符串列表转换为元组

python - 将字符串日期时间替换为 Pandas 数据框中的纪元

python - 如何在python中重新定义=?

带有@语法的python装饰器参数

python - 原始 mysql 查询在测试时失败,但使用 django 可以正确运行

python - 在 PYMC3 中求解 ODE