You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决Python双向链表通过__str__方法打印时返回内存地址而非实际值的问题

如何解决Python双向链表通过__str__方法打印时返回内存地址而非实际值的问题

嘿,我来帮你排查这个问题!首先咱们先梳理下你遇到的状况:你想用双向链表的__str__方法打印链表内容,但结果却显示了内存地址而不是实际数据。结合你给出的代码,我整理了几个可能的原因和对应的解决办法:

1. 先修复__str__方法里的缩进错误

看你给出的链表__str__代码,node = node._next这一行的缩进有问题——它的缩进比while循环里的其他语句要浅,这会导致语法错误,甚至让循环无法正常推进遍历所有节点。修正后的代码应该是这样的:

def __str__(self):
    s = "[" 
    node = self._head 
    while node is not None:
        s += str(node._initial_data)
        if node._next:  
            s += "->"
        node = node._next  # 这里要和while内的其他语句保持同一缩进级别
    s += "]"
    return s

2. 检查存储的数据是否是未定义__str__的自定义对象

如果你的_initial_data存储的是一个你自己定义的类的实例,而这个类没有实现__str__或__repr__方法,那么当你调用str(node._initial_data)时,Python就会默认返回该对象的内存地址。解决办法很简单,给这个自定义类加上__str__方法即可:
比如你有一个自定义类:

class MyData:
    def __init__(self, value):
        self.value = value
    
    # 添加这个方法,让它返回可读的字符串
    def __str__(self):
        return str(self.value)  # 这里可以根据你的需求返回任意格式的字符串

3. 可选:给Node类添加__str__方法(方便单独打印节点)

如果你有时候需要单独打印某个Node实例,也可以给Node类加上自己的__str__方法,这样直接打印节点时也能显示数据而不是内存地址:

class Node:
    def __init__(self, initial_data, prev=None, next=None):
        self._initial_data = initial_data
        self._prev = prev
        self._next = next
    
    def __str__(self):
        return str(self._initial_data)

按照上面的步骤调整后,你的链表__str__方法应该就能正常输出节点的实际数据啦!

备注:内容来源于stack exchange,提问作者Rigo Estrada

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 19:24:34