带有浅拷贝的以下命令(s[:])将为您创建s视图,其元素的类型为int,因此在分配后,它会尝试将[i*weight for i in s]创建的元素分配给int容器,但由于结果为C long,因此会引发以下错误:
OverflowError: Python int too large to convert to C long如果您只使用[i*weight for i in s],您也会看到结果:
>>> [i*weight for i in s]
[-1.5608596215653603e+60, -1.5608596215653603e+60, -1.5608596215653603e+60, -1.5608596215653603e+60, -1.5608596215653603e+60, -1.5608596215653603e+60, -1.5608596215653603e+60, -1.5608596215653603e+60, -1.5608596215653603e+60, -1.5608596215653603e+60, -1.5608596215653603e+60, -1.5608596215653603e+60, -1.5608596215653603e+60, -1.5608596215653603e+60, -1.5608596215653603e+60, -1.5608596215653603e+60, -1.5608596215653603e+60, -1.5608596215653603e+60, -1.5608596215653603e+60, -1.5608596215653603e+60, -1.5608596215653603e+60, -1.5608596215653603e+60, -1.5608596215653603e+60, -1.5608596215653603e+60, -1.5608596215653603e+60, -1.5608596215653603e+60, -1.5608596215653603e+60, -1.5608596215653603e+60]相反,你可以直接多个:
>>> s = s*weight
>>> s
array([ 2.70765983e+42, 3.04611731e+42, 3.21534605e+42,
2.53843109e+42, 4.56917596e+42, 4.39994722e+42,
2.19997361e+42, 5.75377713e+42, 6.43069209e+42,
6.09223461e+42, 7.27683579e+42, 7.10760705e+42,
8.12297948e+42, 8.46143696e+42, 9.30758066e+42,
9.64603814e+42, 1.18460117e+43, 1.13383255e+43,
1.09998681e+43, 1.43844428e+43, 1.67536452e+43,
1.59075015e+43, 1.52305865e+43, 1.89536188e+43,
2.13228211e+43, 2.19997361e+43, 2.40304810e+43,
2.03074487e+43])