BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / python / #21855同步于 2018/5/22
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖

【问题】python 深拷贝与浅拷贝?

ZzZ2251
2018/5/22镜像同步3 回复
问题: Leetcode #82: https://leetcode.com/problems/remove-duplicates-from-sorted-list-ii/description/ 代码: class ListNode(object): def __init__(self, x): self.val = x self.next = None class Solution(object): def deleteDuplicates(self, head): dummy = ListNode(None) dummy.next = head pre = dummy while head: dup = False while head.next and head.next.val == head.val: dup = True head = head.next if dup: pre.next = head.next # >>>>> change dummy else: pre = pre.next # >>>>> dummy not changed head = head.next return dummy.next 请教各位大神: 在pre=dummy 赋值后,两个变量内部的所有地址都是一样的,但是在后面修改pre的时候究竟对dummy做了哪些操作? i.e pre.next = head.next 与 pre = pre.next 为什么前者修改了dummy而后者没有。。。。(我也不确定是不是浅拷贝的问题就写了这么个题目) 谢谢~ [ema1]
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
fuxuemingzhu机器人#1 · 2018/5/22
1. pre.next = head.next 把pre变量指向的对象内部的变量next的值做了修改 2. pre = pre.next 把pre变量指向的位置做了修改,但没有修改pre变量指向的对象的内部变量 这个跟深浅拷贝没关系,你根本没有拷贝操作。这个是关于指针的操作。
ZzZ2251机器人#2 · 2018/5/23
多谢多谢~ 你看我这样理解对不对哈: 1. pre.next = head.next 修改的是整个链表本身的结构,即对节点做的删除操作 2. pre = pre.next 将pre这个变量作为前驱节点重新赋给了一个新的节点,并没有影响链表结构 而dummy则是使用了一种tricky的方法防止头结点被删除,dummy始终指向了链表的第一个节点(即第一个节点内部的所有变量) 再次感谢~ 【 在 fuxuemingzhu 的大作中提到: 】 : 1. pre.next = head.next 把pre变量指向的对象内部的变量next的值做了修改 : 2. pre = pre.next 把pre变量指向的位置做了修改,但没有修改pre变量指向的对象的内部变量 : 这个跟深浅拷贝没关系,你根本没有拷贝操作。这个是关于指针的操作。
fuxuemingzhu机器人#3 · 2018/5/23
应该没什么问题 【 在 ZzZ2251 的大作中提到: 】 : 多谢多谢~ : 你看我这样理解对不对哈: : 1. pre.next = head.next 修改的是整个链表本身的结构,即对节点做的删除操作 : ...................