python - Python中的可变和不可变对象
问题描述
我试图理解 python 中的可变/不可变对象。下面的示例,我希望为所有 id(**) 获得相同的对象 id,但 #list 4 不是。我该如何解释只有 #list 4 给出不同对象 ID 的原因?谢谢你。
# list 1
la = [1,2,3]
print('la=', la, ', id(la)= ',id(la))
# list 2
la[0]=9
print('la=', la, ', id(la)= ',id(la))
# list 3
lb=la
print('lb=', lb, ', id(lb)= ',id(lb))
# list 4
lc=la[:]
print('lc=', lc, ', id(lc)= ',id(lc))
la= [1, 2, 3] , id(la)= 2678849549576
la= [9, 2, 3] , id(la)= 2678849549576
lb= [9, 2, 3] , id(lb)= 2678849549576
lc= [9, 2, 3] , id(lc)= 2678844118664
解决方案
[:]
语法是 的快捷方式,copy
它从原始对象创建一个新的(浅拷贝)对象。浅拷贝是一个新的高级对象,因此嵌套对象只会被引用(不会创建嵌套对象的新副本)。例子,
a = [1,2,3]
b = a
id(a) == id(b) # True
c = a[:]
id(a) == id(c) # False
id(a[0]) == id(c[0]) # True
推荐阅读
- javascript - 有没有办法在 child_process spawn 设置超时?
- android - 使用 Android 库的 OverrideLibrary 最低版本
- reactjs - 如何将手动模拟与打字稿、反应和开玩笑一起使用?
- dart - Dart 中的命名参数
- php - 将页面中的某些元素限制为登录用户
- javascript - 离线时如何在 PWA 中显示消息?
- django - 我在 django 项目中更改了会话 cookie 名称,但无法登录
- git - git checkout 来自其他分支的不同名称的文件
- azure-devops - 我在哪里可以找到 ADO Server 2020 与 ADO 服务的完整功能比较?
- linux - 在 Linux 中使用 AzCopy 将表导出到 Blob 存储