GeezerVisonThe World Wide Web, restored to 800 pixels of glory. |
| Home|About|Gaming cabinet|Archives|How it works|Starter sites |
GeezerVison is showing notes.kamacoder.com — Python变量保存的是什么:变量、对象与引用的关系,赋值、名字绑定与id() # Python变量保存的是什么?变量、对象和引用有什么关系?面试官问:“Python的变量里保存的是什么? 很多录友会套用C语言的理解:变量是一块内存,赋值就是把值拷进去。用这个模型看Python,很快会遇到解释不了的现象,比如改了一个列表,另一个变量也跟着变。这道题要讲清楚的是:Python变量是名字,对象才是数据,赋值是在名字和对象之间建立绑定。 # 简要回答Python中,变量是一个名字,它保存的是对某个对象的引用,而不是对象本身。对象是真正存在于内存中的数据,有自己的身份、类型和值。 执行 所以,“修改 # 详细回答# 赋值做了什么:先有对象,再绑定名字执行赋值语句时,Python先计算右侧表达式,得到一个对象,再把左侧的名字绑定到这个对象上: 1 2 3 4 第一行,名字 赋值只改变名字的指向,不会修改原对象。 这也是为什么Python的名字没有固定类型:
图左边是名字所在的命名空间,右边是对象。上半部分的重新绑定只改了箭头;下半部分的原地修改改的是对象,所以两个名字都能看到变化。 # 多个名字共享同一个可变对象当共享的是可变对象时,绑定模型的影响就很明显: 1 2 3 4 5
如果想要一个独立的列表,需要显式创建新对象,比如 # 对象的三要素:身份、类型和值每个对象都有三样东西: 身份:对象在生命周期内唯一且不变的标识,用 类型:决定对象支持哪些操作,用 值:对象保存的数据。可变对象的值可以改,不可变对象的值不能改,这部分展开见《Python中的可变对象和不可变对象有什么区别?》。 名字本身不属于这三要素。同一个对象可以有零个、一个或多个名字指向它。 # |
| You are visitor 01402503 — GeezerVison does not store the pages you look up. Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required. |