作者nevikw39 (牧)
看板Python
标题[问题] 关於赋值
时间Sun Feb 3 23:52:35 2019
如题,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 的指派究竟何时是
参考,何时是复制呢?
--
Sent from my Sony Xperia XZ1
○ PiTT
// PHJCI
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 106.107.176.158
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1549209158.A.FC6.html
1F:推 XperiaZ6C: Python的List是结合array与linked list,用连续记忆体02/03 23:58
2F:→ XperiaZ6C: 去存放list的指标02/03 23:58
果然是指标,但是 Python 也没有什麽传址传参考
3F:推 Raymond0710: Google一下 Python mutable immutable object02/04 00:46
4F:推 ThxThx: 查查"python name binding"02/04 01:30
感谢两位,会再研究看看
※ 编辑: nevikw39 (106.107.176.158), 02/04/2019 10:14:29
5F:推 TitanEric: list.copy() 才是复制唷 其他都是alias 02/04 11:09
6F:推 cspy: 简单来说是复制记忆体的指标位置 02/05 12:34