Я думаю, это то, что вы хотите
nodes = [[Node() for j in range(cols)] for i in range(rows)]
Но инициализация списков не всегда является хорошей практикой. Для матриц это может иметь смысл.
Если вам интересно: документация о список понятий
Демо-код:
>>> class Node:
def __repr__(self):
return "Node: %s" % id(self)
>>> cols = 3
>>> rows = 4
>>> nodes = [[Node() for j in range(cols)] for i in range(rows)]
>>> from pprint import pprint
>>> pprint(nodes)
[[Node: 41596976, Node: 41597048, Node: 41596904],
[Node: 41597120, Node: 41597192, Node: 41597336],
[Node: 41597552, Node: 41597624, Node: 41597696],
[Node: 41597768, Node: 41597840, Node: 41597912]]