返回信息流问题:
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]
这是一条镜像帖。来源:北邮人论坛 / python / #21855同步于 2018/5/22
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖
【问题】python 深拷贝与浅拷贝?
ZzZ2251
2018/5/22镜像同步3 回复
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
1. pre.next = head.next 把pre变量指向的对象内部的变量next的值做了修改
2. pre = pre.next 把pre变量指向的位置做了修改,但没有修改pre变量指向的对象的内部变量
这个跟深浅拷贝没关系,你根本没有拷贝操作。这个是关于指针的操作。
多谢多谢~
你看我这样理解对不对哈:
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变量指向的对象的内部变量
: 这个跟深浅拷贝没关系,你根本没有拷贝操作。这个是关于指针的操作。
应该没什么问题
【 在 ZzZ2251 的大作中提到: 】
: 多谢多谢~
: 你看我这样理解对不对哈:
: 1. pre.next = head.next 修改的是整个链表本身的结构,即对节点做的删除操作
: ...................