python - 为什么元组不会改变而列表会改变?
问题描述
为什么在示例II中只有第一个元组发生变化,而在示例I 中两个列表都发生了变化 ?请考虑这两个程序及其各自的输出(I和II)。
我。
L1 = [1,2,3,4]
L2 = L1
L2.append(5)
print("L1: ", L1)
print("L2: ", L2)
输出:
L1: [1,2,3,4,5]
L2: [1,2,3,4,5]
二、
L1=(1,2,3,4)
L2=L1
L2 += (5,)
print("L1: ", L1)
print("L2: ", L2)
输出:
L1: (1,2,3,4)
L2: (1,2,3,4,5)
解决方案
当List
你使用这个'='赋值运算符时,它不会创建新的引用,它引用同一个对象。
在Tuple
您使用此“=”赋值运算符时,它会创建新的引用。
参考下面的代码,检查ID的输出。
L1 = [1,2,3,4]
L2 = L1
L2.append(5)
print("L1: ", L1)
print("L2: ", L2)
print("ID of L1: ", id(L1))
print("ID of L2: ", id(L2))
# Output =
# L1: [1, 2, 3, 4, 5]
# L2: [1, 2, 3, 4, 5]
# ID of L1: 2598160167616
# ID of L2: 2598160167616
# -------------------------------------------
L1=(1,2,3,4)
L2=L1
L2 += (5,)
print("L1: ", L1)
print("L2: ", L2)
print("ID of L1: ", id(L1))
print("ID of L2: ", id(L2))
# Output =
# L1: (1, 2, 3, 4)
# L2: (1, 2, 3, 4, 5)
# ID of L1: 2598161745696
# ID of L2: 2598161718864
# -------------------------------------------
推荐阅读
- python - 如何使用python和xlwings库在不使用索引的情况下在特定的excel行上迭代编写
- r - 网格从评估的文本中排列多个 ggplots
- node.js - 是passport.authenticate('jwt', ..} nodejs中最好的认证方式吗?也请告诉我学习express-sequelize-mongo-passport-jwt的文章
- python-3.x - 单元测试 Flask 应用程序 API 端点
- python - 如何使用复杂条件比较两个数据框中的两列
- react-native - 嵌套部分列表
- ember.js - 使用 MDX 语法在 Storybook 中渲染 EmberJS / Glimmer 组件
- flutter - 位置欺骗器破坏了地理定位器?
- angularjs - 不同模块中的 AngularJS 参考指令
- flutter - 颤动:计数器未在底部导航栏上完整显示