[问题] 关于赋值

楼主: nevikw39 (牧)   2019-02-03 23:52:35
如题,Python 的变量系统至今对我仍然是个谜。
Python 既是动态语言,变量感觉倾向于强型别但又不需要再宣告。因此,直译器到底是怎
么判断型别的?而且,同一个变量名称前后可能指涉不同型别。
主要想请教的是 dict 和 list 的部分:
# base 读自 json
def callback(e):
...
data = base
data[...] = ...
这样好像会改动到原本 base 的值欸?
还有例如:
lst = []
a = [0, 0, 0]
lst.append(a)
for i in range(len(a)):
a[i] += 1
lst.append(a)
结果 lst 的值不是 [[0, 0, 0], [1, 1, 1]] ,而是 [[1, 1, 1], [1, 1, 1]] 欸!
所以,当我作 data = base 这个运算时,感觉只是将 data 参考指向 base 这个实体而已
,而我若 lst.append(a) 也只是把 lst 的尾端指向 a。那么,Python 的指派究竟何时是
参考,何时是复制呢?
作者: XperiaZ6C (真●安卓轻旗舰)   2019-02-03 23:58:00
Python的List是结合array与linked list,用连续内存去存放list的指标
作者: Raymond0710 (雷门)   2019-02-04 00:46:00
Google一下 Python mutable immutable object
作者: ThxThx (洗洗睡)   2019-02-04 01:30:00
查查"python name binding"
作者: TitanEric (泰坦)   2019-02-04 11:09:00
list.copy() 才是复制唷 其他都是alias
作者: cspy (Perfect Stranger)   2019-02-05 12:34:00
简单来说是复制内存的指标位置

Links booklink

Contact Us: admin [ a t ] ucptt.com