python-3.x - 在 Python3 中交换列表交换引用中的值吗?
问题描述
我想知道交换下面列表项中的值是否只是交换值或参考地址。
a = [1, 2]
a[0], a[1] = a[1], a[0]
print(a) # [2, 1]
在 Python3 的机制下,我想知道下面哪一个与上面的代码等效。
Case1:插入值本身
a[0], a[1] = 2, 1
案例2:交换那个项目的引用(所以只有引用被改变,而不是值本身)
a[0], a[1] = (address of 2nd element), (address of 1st element)
解决方案
在 Python 中,内存是为值而不是变量分配的。您可以通过以下方式验证这一点。
>>> a = 1
>>> b = 1
>>> hex(id(a))
'0x102ecdbf0'
>>> hex(id(b))
'0x102ecdbf0'
>>> x = [0,1]
>>> hex(id(x[0]))
'0x102ecdbd0'
>>> hex(id(x[1]))
'0x102ecdbf0'
>>> x[0],x[1] = x[1],x[0]
>>> hex(id(x[0]))
'0x102ecdbf0'
>>> hex(id(x[1]))
'0x102ecdbd0'
这里,a,b,x[1] 共享相同的地址,因为值相同。
所以所有指向相同值的变量都将具有相同的内存地址。在更改变量值时,该变量被适当地映射到新值的地址。
对于您的情况,它可以被视为交换参考。
推荐阅读
- python - 如何从 Teachable 机器生成 pbtxt
- reactjs - 可以将脉轮与顺风混合吗?
- node-red - 加载 zip 内容(函数执行 2 次)
- java - 如何在 selenium webdriver (java) 中生成报告?
- android - android 可编辑 Baseurl 改造
- python - 如何将已生成的 XML 字符串附加到使用 minidom 生成的 XML 中?
- python - 如何以更好的优化方式计算 cross_val_score() 的平均值?
- ruby-on-rails - Rails:在不渲染页面的情况下发送 401 错误
- vaadin - 如何创建没有 POJO(动态列)的网格?
- typescript - 如何模拟cheerio.load().toArray().slice();