Python 中数组的大小与变量的大小

psf*_*ero 5 python arrays size types

在我的问题之前快速了解一下背景。我在重构俄罗斯方块游戏时遇到了这个问题。

可以通过以下方式表示俄罗斯方块(我将使用“L”形作为示例):

布尔数组:

boolShape = [False, False, False, False,
             False, True, True, False,
             False, False, True, False,
             False, False, True, False]
Run Code Online (Sandbox Code Playgroud)

一个字符数组(我猜是“长度为 1 的字符串”,因为这是 Python):

charShape = ['.', '.', '.', '.',
             '.', 'X', 'X', '.',
             '.', '.', 'X', '.',
             '.', '.', 'X', '.']
Run Code Online (Sandbox Code Playgroud)

整数数组:

intShape = [0, 0, 0, 0,
            0, 1, 1, 0,
            0, 0, 1, 0,
            0, 0, 1, 0]
Run Code Online (Sandbox Code Playgroud)

一个 numpy 整数数组:

npShape = np.array([0, 0, 0, 0,
                    0, 1, 1, 0,
                    0, 0, 1, 0,
                    0, 0, 1, 0])
Run Code Online (Sandbox Code Playgroud)

一个 numpy 布尔数组:

npBoolShape = np.array([0, 0, 0, 0,
                        0, 1, 1, 0,
                        0, 0, 1, 0,
                        0, 0, 1, 0], dtype=bool)
Run Code Online (Sandbox Code Playgroud)

当我使用sys.getsizeof(array)andsys.getsizeof(array[i])获取每个数组和单个元素的大小时,我得到以下信息:

Bool  | Array: 184 | Item: 24

Char  | Array: 184 | Item: 50

Int   | Array: 184 | Item: 24

NP    | Array: 224 | Item: 32

NPBool| Array: 112 | Item: 25
Run Code Online (Sandbox Code Playgroud)
  1. 谁能解释为什么单个字符比 int 大,但 20 个数组与 20 个 int 大小相同?

  2. 在上述阵列之一中实现游戏对性能有什么影响吗?这对人类玩家没有任何区别,但是,要训练 AI,需要多次迭代,时间成为问题。