list和numpy.ndarray切片赋值之不同

本文探讨了Python中list和numpy.ndarray在进行切片赋值时的不同表现。实验表明,list的切片赋值不会影响原list,而numpy.ndarray的切片赋值会直接影响原数组。这源于numpy的视图机制,中间变量对切片的修改会反映到原数组上,除非直接对中间变量整体赋值,此时中间变量不再代表原数组的视图。
摘要由CSDN通过智能技术生成

list和numpy.ndarray切片赋值之不同

  • 实验1,通过中间变量接收list的切片,并改变切片的值,查看原list和中间变量的值.
lst = [1, 2, 3]
temp1 = lst[:]
print(temp1)
temp1[0] = 9
print(temp1)
print(lst)
[1, 2, 3]
[9, 2, 3]
[1, 2, 3] # 可见原list并没有随着中间变量的某些值的改变而改变
  • 实验2,通过中间变量接收ndarray类型的切片,并改变切片的值,查看原array和中间变量的值。
import numpy as np


lst = [1, 2, 3]
arr1 = np.array(lst)
temp2 = arr1[:]
print(temp2)
temp2[0] = 9
print(temp2)
print(arr1)
print("*" * 20)
arr2 = np.array(lst)
temp3 = arr2[1:]
print(temp3)
temp3[0:] = 9
print(temp3)
print(arr2)
[1 2 3]
[9 2 3]
[9 2 3] # 原array的原切片部分随着中间变量的索引值改变而改变
********************
[2 3]
[9 9]
[1 9 9] # 原array的原切片部分随着中间变量的切片值改变而改变

总结,将list切片作为一个中间变量,并改变之(通过切片或索引改变),无法改变原list,必须直接对list切片赋值才能改变原list(很容易验证),而numpy.ndarray可以将切片赋予一个临时变量,然后对该变量的切片形式进行赋值就可以改变原来的array,就是说,那个临时变量是原array的视图。但是要注意对临时变量的改变是通过索引或切片形式,而不是直接对临时变量赋值,那样的话,临时变量的地址空间就直接改变了,不能代表原array的视图了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值