返回信息流【 以下文字转载自 StudyShare 讨论区 】
发信人: wai7niu8 (wai7niu8), 信区: StudyShare
标 题: 人生苦短,求大神解答python疑惑
发信站: 北邮人论坛 (Fri Aug 1 23:12:28 2014), 站内
如上截图:
第一个问题,为什么开始时三个id号一样~
第二个问题,id号为什么在append时不变,在直接赋值后却发生变化~
求详细解答~
这是一条镜像帖。来源:北邮人论坛 / python / #2444同步于 2014/8/2
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖
人生苦短,求大神解答python疑惑 (转载)
wai7niu8
2014/8/2镜像同步9 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
挺有意思的,首先我们来看一下help(id):
Help on built-in function id in module __builtin__:
id(...)
id(object) -> integer
Return the identity of an object. This is guaranteed to be unique among
simultaneously existing objects. (Hint: it's the object's memory address.)
再来看第一个问题:
a=[[]]*3这样的写法看起来是定义了三个[],然后放在一个list里面,实则是定义一个[]然后copy3份放在list里面。
既然是同一个[]的shallow copy,id自然也是一样的。
第二个问题也就比较清晰了:
append只修改变量的"内容",而赋值则是将变量的"地址"修改。
p.s.查完这个发现其实Python官方文档里有关于这个问题的解释...
https://docs.python.org/2/library/stdtypes.html#sequence-types-str-unicode-list-tuple-bytearray-buffer-xrange
也就是append是在原变量的地址后边附加值,而赋值相当于给了它一个新的地址呗~
【 在 Chon 的大作中提到: 】
: 挺有意思的,首先我们来看一下help(id):
: [code=bash]
: Help on built-in function id in module __builtin__:
: ...................
【 在 wai7niu8 的大作中提到: 】
: 发信人: wai7niu8 (wai7niu8), 信区: StudyShare
: 标 题: 人生苦短,求大神解答python疑惑
: 发信站: 北邮人论坛 (Fri Aug 1 23:12:28 2014), 站内
: ...................