注意事项
[object] * n 的时候并没有复制n-1个object,而是增加了n-1个对object的引用。
例子说明
目标:生成一个10*10且所有值都是0的二维数组
方法一:
1
|
[ [ 0 ] * 10 ] * 10 |
方法二:
1
|
[ [ 0 for _ in range ( 10 )] for _ in range ( 10 )] |
本以为两种方法得到的结果是一样,但是在使用时发现有些不一样。如下面的代码所示。
当仅仅更改a[2][2]的值的时候,a[k][2] (k取0到9)全部被更改成了4。
其实这是因为[object] * n 的时候并没有复制n-1个object,而是增加了n-1个引用。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
a = [ [ 0 ] * 10 ] * 10 b = [ [ 0 for _ in range ( 10 )] for _ in range ( 10 )] a[ 2 ][ 2 ] = 4 b[ 2 ][ 2 ] = 4 for i in a: print (i) print ( "--------" ) for i in b: print (i) [ 0 , 0 , 4 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] [ 0 , 0 , 4 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] [ 0 , 0 , 4 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] [ 0 , 0 , 4 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] [ 0 , 0 , 4 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] [ 0 , 0 , 4 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] [ 0 , 0 , 4 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] [ 0 , 0 , 4 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] [ 0 , 0 , 4 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] [ 0 , 0 , 4 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] - - - - - - - - [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] [ 0 , 0 , 4 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] |
补充:python 中numpy数组与数组使用*相乘的效果
输入:
1
2
3
4
5
6
7
|
import numpy as np b = np.array([[ 1 , 2 , 3 , 4 ],[ 5 , 6 , 7 , 8 ],[ 9 , 10 , 11 , 12 ]]) a = np.array([ 150 , 270 , 150 , 270 ]) b2 = b * a print (b) print (a) print (b2) |
输出:
[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
[150 270 150 270]
[[ 150 540 450 1080]
[ 750 1620 1050 2160]
[1350 2700 1650 3240]]
以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。如有错误或未考虑完全的地方,望不吝赐教。
原文链接:https://blog.csdn.net/u010037020/article/details/106219720