python - 包含对列表的引用但引用列表何时被删除的变量?
问题描述
据我了解,将列表变量分配给变量将创建一个引用,如 C 中的指针。
>>> l1 = ['joe biden', 'donald trump', 'justin trudeau']
>>> l2 = l1
>>> l1
['joe biden', 'donald trump', 'justin trudeau']
>>> l2
['joe biden', 'donald trump', 'justin trudeau']
>>> l1.append('barack obama')
>>> l1
['joe biden', 'donald trump', 'justin trudeau', 'barack obama']
>>> l2
['joe biden', 'donald trump', 'justin trudeau', 'barack obama']
>>>
这是意料之中的。
但事情是这样的:
>>> del l1
>>> l1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'l1' is not defined
>>> l2
['joe biden', 'donald trump', 'justin trudeau', 'barack obama']
>>> l1.append('obama')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'l1' is not defined
>>> l2.append('obama')
>>> l2
['joe biden', 'donald trump', 'justin trudeau', 'barack obama', 'obama']
>>>
l1 被删除了,那么 l2 指向什么?现在看来 l2 包含自己的列表。为什么会这样?
解决方案
l2 指向 l1 而不是 l1 的内存位置。因此,如果 l1 被删除,你仍然有 l2 指向同一个列表
推荐阅读
- typescript - 打字稿使只读属性可写
- java - Java 10 上带有 Oracle 时间戳的超前时钟
- macos - Safari 使用什么 API 来获取帐户密码
- python - 带有 numpy 的 PySpark:性能不稳定
- android - 为什么我的应用程序运行两次?
- vba - 列范围的最大值
- ios - 如何使用 Siri 快捷方式在我的应用程序中显示特定页面?
- javascript - 多个页面的 React-Redux 状态形状
- javascript - 如何从数组(例如本地图像或网站)添加到滑块图像?
- c++ - 派生 std::ofstream 和重载 operator<<