一、目录
- python中列表与数组的区别
- torch 的reshape与view的区别
- python 如何解决内存泄漏
二、实现
- python中列表与数组的区别
类型和内部实现:列表是动态数组,它可以在运行时改变大小,并可以包含不同类型的元素。数组则是静态的,其大小在创建时就已经固定,且所有元素必须是相同类型。
列表在Python中是动态数据结构,因此操作可能会比数组慢,因为它们需要进行内存分配或释放。数组因为其固定的内存布局通常在内存操作方面具有更好的性能。
索引和切片操作:数组的索引和切片操作通常比列表更高效,因为数组是连续的内存块。
数组切片:数组没有像列表那样的切片操作,因此对于数组,你只能通过索引或者其他方式访问元素。
运算方式不一样:数组可以进行四则运算,列表只能使用加号进行拼接,拼接之后形成一个新的列表。
2. torch 的reshape与view的区别
view() 函数使tensor 的shape 发生改变,但返回的tensor 与原tensor 共享内存,即指针指向同一存储空间; 所以view() 函数使tensor 发生改变时,需要原tensor存储必须连续。
view() 不满足连续性条件时,需要先contiguous()方法将原始tensor转换为满足连续条件的tensor.
reshape() 不需要满足连续性条件。返回的tensor与原tensor 不共享内存。
连续性条件:stride[i]=stride[i+1]*size[i+1]
- python 如何解决内存泄漏
查看内存泄漏篇