微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

对象与引用

如何解决对象与引用

我试图理解引用和对象之间的区别。如果我使用的术语不正确,请告诉我。

考虑以下代码

page1>404page>page2

还要考虑以下代码

# SCENARIO 1
a = 1
b = a
a = 3
b  # still 1,no surprises there

我已经看到了很多措辞相似的问题,但是我仍然无法理解是什么使方案1和2有所不同,因此在方案2中,我们可以通过操纵其引用来更新# SCENARIO 2 class Node: def __init__(self,link,value): self.link = link self.value = value sll = Node(Node(None,1),2) current = sll current = current.link current.value = 3 sll.link.value # updated to 3! ,但是我们不能做同样的事情在方案1中。

解决方法

两个代码本质上是不同的。在方案1中,您只做作业。与Node相同(下面我改用简单的list):

# SCENARIO 1
a = 1
b = a
a = 3
b  # still 1,no surprises there
# SCENARIO 1
a = [1]
b = a
a = [3]
b  # still [1],no surprises there

真的没关系,在这里使用什么。

# SCENARIO 2
sll = [1,2]
current = sll
current[0] = 3
sll[0]  # updated to 3!

这是因为sllcurrent相同的对象。名称不同,但对象相同,在内存中的位置相同。

您无法使用int和类似的方法执行方案2,因为int(和类似的类型)是不可变的,并且您无法执行类似a[0]=...a.value=...的任何操作无法对其进行突变。您可以更改list(或OP中的Node)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。