返回信息流今天看了[一篇文章](https://www.cnblogs.com/devilmaycry812839668/p/7681731.html)提到了 memory_profiler 这个模块,我就自己测试了下
http://ww1.sinaimg.cn/large/c9984d14ly1g3b22f0r4kj20l00643yl.jpg
但是结果跟预想的不一样,按道理说第8行应该增加了内存占用吧,是python优化了吗,还是因为我用了python3。。。小白百思不得其解
附测试代码:
```python
import copy
import sys
@profile
def fun():
a=[1,2,3,4,5,6,7,8,9,0]
b=a
b=a[1:-1]
if __name__=="__main__":
fun()
```
运行:
```Shell
$python -m memory_profiler run.py
```
这是一条镜像帖。来源:北邮人论坛 / python / #23972同步于 2019/5/23
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖
使用 memory_profiler 测内存开销的一个小问题
MasamiFans
2019/5/23镜像同步7 回复
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
但是为什么
b=a[1:-1]
之后
id(b) 和 id(a) 的值不同了呢,求问,我一直以为值不同了它们就指向两块不同内存了
【 在 specops 的大作中提到: 】
: b=a[1:-1]?
: 切片也是引用 没有动态内存分配 就像C++的string_view
赋值之后a和b是两个不同的对象 在内存中的位置不同 所以id(a)!=id(b)
但在a和b中指向数据的指针是一样的 相当于重复利用了一块数据 所以不需要分配新的内存
【 在 MasamiFans (【意涵团】MasamiFans) 的大作中提到: 】
: 但是为什么
: b=a[1:-1]
: 之后
: ...................
import sys
import copy
@profile
def fun(upper=100):
a = [x for x in range(1, upper)]
b = a
b = a[1:-1]
b[0] = 3
# print(id(a), id(b))
c = copy.copy(b)
d = copy.deepcopy(b)
if __name__=="__main__":
fun(100000)
lz可以试试参数分别设定为10,1000,100000的时候的运行结果。
看标题本以为自己懂了,测完以后发现自己好像没懂[ema1][ema12]
切片也是浅拷贝。b = a[1:-1]只会增加一些固定大小的指针吧,内存增量太低了没有被memory_profiler记录下来,我猜,就像你的a赋值那行也没有内存增加一样。