python - 在 Python 中引用自定义类
问题描述
我知道 Python 中的自定义类通常是可变的。s
因此,在下面的示例中,对函数中的参数所做的任何更改inc_age
都会反映在调用部分。
class Student:
def __init__(self, name, age):
self.name = name
self.age = age
def inc_age(s):
s.age += 1
s1 = Student("Test",5)
inc_age(s1)
print(s1.age) # 6
我尝试使用自定义类在 Python 中实现链表,如下所示:
class ListNode:
def __init__(self, data=0, next=None):
self.data = data
self.next = next
def next_node(L):
L = L.next
end = ListNode(3)
mid = ListNode(2,end)
beg = ListNode(1,mid)
next_node(beg)
print(beg.data) # 1
我的问题是为什么在调用部分没有观察到L
函数中对象的变化。next_node
解决方案
简短的版本是这样的:
- 如果您更改 中值的属性
L
,这些属性将在对该值的任何其他引用中表示。 - 如果您只是将局部变量更改
L
为完全不同值的名称,那么除了局部变量之外不会改变任何内容L
。
如果这让您感到困惑,那么您没有正确考虑 Python 中的变量是什么。在某些语言中,例如 C++,变量是值所在的位置。在其他语言中,例如 Python,变量只是一个名称,您可以在命名空间中查找以查找值;价值观随心所欲。
所以,L =
对于任何值的名称都不做任何事情L
,它只是L
在本地命名空间中为不同的值生成一个名称。
但是L.next =
会在所引用next
的值的命名空间中为不同的值命名。L
因此,具有相同值的任何其他名称L
都可以看到更改。
推荐阅读
- apache-camel - 在 http4-component 范围内完成交换
- javascript - 如何从对象数组创建的 html 列表中删除逗号?
- r - 重复代码,需要帮助创建函数格式并在数据框中创建新列
- javascript - 在 ReactJS 中合并相同的键
- depth-first-search - llist out of index range。我的代码所属的实际问题请参考以下链接
- arrays - C中的全数组长度
- html - html的所有其他页面的页眉和页脚合并
- python - 安装深度学习框架(Caffe)时遇到错误
- reactjs - 导入反应给出这个错误';' 预期.ts(1005)
- authentication - 登录时使用令牌真的是无状态的吗?