Вы постоянно используете один и тот же экземпляр словаря.
def addrow(self, name):
self.rows[name] = self.cols
Помните, что Python похож на Java, когда дело доходит до переменных - каждое имя является просто ссылкой на экземпляр объекта. Это не так, как в C, где присвоение переменной почти всегда означает копирование значение.
Если вы хотите создать табличный класс quick-n-dirty для строк и столбцов, вы можете использовать defaultdict
, например:
from collections import defaultdict
class RowsAndColumns:
def __init__(self):
self._rows = defaultdict(dict)
def get(self, row, col):
return self._rows[row][col]
def set(self, row, col, value):
self._rows[row][col] = value
matrix = RowsAndColumns()
matrix.set("Coke", "Price", 1.99)
print matrix.get("Coke", "Price") # 1.99
print matrix.get("Pepsi", "Price") # KeyError "Price"