【发布时间】:2020-12-21 13:20:00
【问题描述】:
我试图理解 python 的这种晦涩难懂的行为。我很确定这不是错误,但我无法真正解释为什么它会这样。 我正在尝试将一些图像加载到列表中,然后对其进行操作。
这是一个最小的例子:
import numpy as np
from PIL import Image
import os
DATA_URL = ('./images/')
def load_data():
data_internal = list()
for root, dirs, files in os.walk(DATA_URL, topdown=False):
for name in files:
with Image.open(DATA_URL + name) as f:
data_internal.append(f)
return data_internal
data = load_data()
print(data[0])
print(np.array(data[0]))
此代码产生以下内容:
> <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=2x2 at 0x1EDCC735708>
> <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=2x2 at 0x1EDCC735708>
所以
data[0]
和
np.array(data[0])
完全一样。
但是,如果我添加一行打印
f
作为一个
np.array()
在读入中,行为发生变化:
import numpy as np
from PIL import Image
import os
DATA_URL = ('./images/')
def load_data():
data_internal = list()
for root, dirs, files in os.walk(DATA_URL, topdown=False):
for name in files:
with Image.open(DATA_URL + name) as f:
data_internal.append(f)
print(np.array(data_internal[0]))
return data_internal
data = load_data()
print(data[0])
print(np.array(data[0]))
该示例的输出是
> [[[146 135 129]
> [145 134 128]]
>
> [[148 137 133]
> [148 137 133]]]
>
><PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=2x2 at 0x261491DEF48>
>
>[[[146 135 129]
> [145 134 128]]
>
> [[148 137 133]
> [148 137 133]]]
正如我所料。
谁能告诉我,为什么仅仅访问变异(转换为 numpy 数组)列表条目就可以实现这一点?
非常感谢和最好的问候
【问题讨论】: