NumPy中的切片与Python列表区别

Python列表中的切片:

Microsoft Windows [版本 10.0.18363.1198]
(c) 2019 Microsoft Corporation。保留所有权利。

C:\Users\chenxuqi>python
Python 3.7.4 (tags/v3.7.4:e09359112e, Jul  8 2019, 20:34:20) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> ls = [0,1,2,3,4,5,6,7,8,9]
>>> ls
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> ls[0:3]
[0, 1, 2]
>>> ls2 = ls[0:3]
>>> ls2[0]= 44444
>>> ls2
[44444, 1, 2]
>>> ls
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> ls[0:2] = [999,888]
>>> ls
[999, 888, 2, 3, 4, 5, 6, 7, 8, 9]
>>> ls2
[44444, 1, 2]
>>>
>>>

NumPy中的切片:

Microsoft Windows [版本 10.0.18363.1198]
(c) 2019 Microsoft Corporation。保留所有权利。

C:\Users\chenxuqi>python
Python 3.7.4 (tags/v3.7.4:e09359112e, Jul  8 2019, 20:34:20) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> ls = [0,1,2,3,4,5,6,7,8,9]
>>> ls
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> ls = np.array(ls)
>>> ls
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> ls[0:3]
array([0, 1, 2])
>>> ls2 = ls[0:3]
>>> ls2
array([0, 1, 2])
>>> ls
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> ls
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> ls2
array([0, 1, 2])
>>> ls2[0]= 999
>>> ls2
array([999,   1,   2])
>>> ls
array([999,   1,   2,   3,   4,   5,   6,   7,   8,   9])
>>> ls[0:2] = [777,888]
>>> ls
array([777, 888,   2,   3,   4,   5,   6,   7,   8,   9])
>>> ls2
array([777, 888,   2])
>>>
>>>
>>>

总结: 在Python中列表中的切片是进行了拷贝,切片后得到的是一个新的对象,和原列表变量相互独立,改变两者任意一个都不会影响到另一个.而NumPy就不同了,NumPy的切片并不是拷贝,它只是原对象的一个视图(view),并不会重新在内存中创建一个新对象,因此,改动任意一个对象都会影响到另一个对象,因为它们在内存上是共享的(这是NumPy为了更高效更节省内存资源而做的优化).

参考更多资料: Learn more about copies and views in NumPy here
参考链接: NumPy 副本和视图

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值