- 主题:Python 的标准模块 array 是不是内存连续的
array存的只是PyObject*吧,指针数组连续不代表存的指针是连续的吧。
--
FROM 117.81.80.*
【 在 cum 的大作中提到: 】
: new出来的内存是否连续难道不是基于os的内存分配策略?
: 虚拟内存地址当然是连续的,物理内存就不一定了。
python数组这里的连续很可能不是这个意思,
多维数组的连续, 一直就有C布局和F(Fortran)布局的区分,
也就是二维数组线性化为一维线性空间如果展开的问题, C是横展开, 而F(fortran)选择的是列展开。
也就是前者(0,0)和(0,1)是相邻着的, 或者(0,0)和(1,0)是内存相邻着的。
如果数组比较大, 尤其大到CPU的cache不命中, 不同布局对性能是有一定的影响的。
--
FROM 124.126.2.*
【 在 echiz 的大作中提到: 】
: 不是说你忽悠,是开这课的人。
: 当年学数据结构就一脑袋问号,等想明白数据结构讲的是什么的时候,我就纳闷了,为啥数据结构的课要在微机原理和操作系统之前开?
: 现在更离谱,拿java和c#讲数据结构不说,还要拿python讲.......
: ...................
数据结构+算法, 是现代计算机的基石,
数据结构是算法的食材, 一顿大餐, 需要大师傅(厨师)的算法和恰当的食材(数据结构)
但是, 食材也得落地,画出来的饼,鱼缸里只能看的鱼,是不行的。
目前的计算机体系CPU+Memory的冯诺依曼结构, 落地到内存也是必然选择。
--
FROM 124.126.2.*
其实就是对“数组”这个术语的解释问题
看到 array,感觉内存布局也是应该连续的
然后套用 C 的方式去理解
可 Python 里的下标并不直接跟 C 对应
【 在 Madlee 的大作中提到: 】
: array存的只是PyObject*吧,指针数组连续不代表存的指针是连续的吧。
--
FROM 117.143.144.*
【 在 poggy 的大作中提到: 】
: 多维数组的连续, 一直就有C布局和F(Fortran)布局的区分,
: 也就是二维数组线性化为一维线性空间如果展开的问题, C是横展开, 而F(fortran)选择的是列展开。
原先看到“行优先”和“列优先”,不知道和编程语言有什么关联
: 如果数组比较大, 尤其大到CPU的cache不命中, 不同布局对性能是有一定的影响的。
怪不得性能优化的时候要考虑优先问题
--
FROM 117.143.144.*
Python的list等都是包了一层又一层的了
Python代码适合描述算法,但是Python代码不适合验证算法
如果你非要讲清楚Python的数据结构,你就会背离你上课的主要目标
【 在 easior 的大作中提到: 】
: 其实就是对“数组”这个术语的解释问题
: 看到 array,感觉内存布局也是应该连续的
: 然后套用 C 的方式去理解
: ...................
--
修改:gfkid FROM 114.249.22.*
FROM 114.249.22.*
这个我懂,我只讲数据结构的大道理(咳……)
用 Python 的代码,我只说那是模拟不是验证
至于 Python 的 C 实现,那是肯定不敢讲的
【 在 gfkid 的大作中提到: 】
: Python的list等都是包了一层又一层的了
: Python代码适合描述算法,但是Python代码不适合验证算法
: 如果你非要讲清楚Python的数据结构,你就会背离你上课的主要目标
: ...................
--
FROM 117.143.144.*
leetcode有Python代码的测试,也还行,也不是完全不行
只不过感觉Python的list是有优化的
让学生自己去钻研吧
【 在 easior 的大作中提到: 】
: 这个我懂,我只讲数据结构的大道理(咳……)
: 用 Python 的代码,我只说那是模拟不是验证
: 至于 Python 的 C 实现,那是肯定不敢讲的
--
FROM 114.249.22.*
leetcode 与用 Python 代码验证算法的某些特性并没有太大关系
最多只能说明代码是正确的
【 在 gfkid 的大作中提到: 】
: leetcode有Python代码的测试,也还行,也不是完全不行
: 只不过感觉Python的list是有优化的
: 让学生自己去钻研吧
: ...................
--
FROM 120.253.228.*
我不是反对数据结构这门课,我实际上认为这门课很重要。
但是课程安排要合理,前置课程也需要仔细考虑。要以方便理解和方便使用为导向。
我不知道你的老师是怎么教的,我学的时候就是散着学的,微机原理,操作系统,概率,离散,
数据结构,数据库原理,图形学全是独立无关的。
毕业一段时间才发现这些课程其实是有一根线,全能串起来的。
如果串起来的话,学习之后上手会容易很多。
【 在 poggy 的大作中提到: 】
:
: 数据结构+算法, 是现代计算机的基石,
: 数据结构是算法的食材, 一顿大餐, 需要大师傅(厨师)的算法和恰当的食材(数据结构)
: ...................
--
FROM 110.229.105.*