美文网首页进击的Python程序员工具癖
Python中 传递值 与 传递引用 的区别

Python中 传递值 与 传递引用 的区别

作者: zhaoolee | 来源:发表于2018-02-21 16:55 被阅读135次

    对于不可变类型传递值(不会影响原数据)

    不可变类型

    对于可变类型传递引用(会影响原数据)

    不可变类型传递引用

    python3不可变类型

    • Number(数字)
    • String(字符串)
    • Tuple (元组)

    python3可变类型

    • List(列表)
    • Dictionary (字典)
    • Sets(集合)

    参数传递的思考

    • 我们声明的变量名可以看做便签
    • 为变量名赋值的操作可以看做将标签贴到"值"的表面(值可以是可变类型,和不可变类型)

    以链表中的节点对象为例(实例化的节点对象为不可变类型, 但对象中的属性是可变的)

    链表对象
    class NodeList(object):
        def __init__(self, val):
            self.val = val
            self.next = None
    
    # 遍历链表
    def traverse_nodes(head):
    
        tmp = head
        while tmp:
            print("节点id为:", id(tmp), "节点的值为:", tmp.val, )
            tmp = tmp.next
    
    # 创建链表
    def create_node_list():
    
        head = NodeList(0);
        left_p = head
        print("头节点id:",id(head), "当前节点id:",id(left_p), "当前节点值:", left_p.val)
    
        left_p.next = NodeList(1);
        left_p = left_p.next
        print("头节点id:",id(head), "当前节点id:",id(left_p), "当前节点值:", left_p.val)    
    
        left_p.next = NodeList(2);
        left_p = left_p.next
        print("头节点id:",id(head), "当前节点id:",id(left_p), "当前节点值:", left_p.val)
    
        left_p.next = NodeList(3);
        left_p = left_p.next
        print("头节点id:",id(head), "当前节点id:",id(left_p), "当前节点值:", left_p.val)
    
        return head
    
    def main():
        # 创建链表
        print("==>创建链表函数中:")
        head = create_node_list()
    
        print("==>在遍历函数中:")
        traverse_nodes(head)
    
    if __name__ == '__main__':
        main()
    

    相关文章

      网友评论

        本文标题:Python中 传递值 与 传递引用 的区别

        本文链接:https://www.haomeiwen.com/subject/aointftx.html