Python与对象矩阵
我是Python新手。我使用3.3版。我做错了什么,但我找不到。 我创建了tb1,一个对象数组。 内容被初始化,然后打印。 我创建了第二个数组tb2。 然后将tb1的内容复制到tb2中,同时转置行和列。 第二次打印显示tb1已更改。我不明白为什么。 这个问题不会发生在整数矩阵上。 打印结果如下: 123456789 123256369Python与对象矩阵,python,matrix,Python,Matrix,我是Python新手。我使用3.3版。我做错了什么,但我找不到。 我创建了tb1,一个对象数组。 内容被初始化,然后打印。 我创建了第二个数组tb2。 然后将tb1的内容复制到tb2中,同时转置行和列。 第二次打印显示tb1已更改。我不明白为什么。 这个问题不会发生在整数矩阵上。 打印结果如下: 123456789 123256369 #!/bin/python3 class Item: n=0 m=0 class Tb: items = [[Item() for i in ran
#!/bin/python3
class Item:
n=0
m=0
class Tb:
items = [[Item() for i in range(3)] for j in range(3)]
tb1 = Tb()
for i in range(3):
for j in range(3):
tb1.items[i][j].n = i*3+j+1
# print original content of tb1
for i in range(3):
for j in range(3):
print( tb1.items[i][j].n, end="")
print()
tb2 = Tb()
for i in range(3):
for j in range(3):
tb2.items[j][i].n = tb1.items[i][j].n
# print content of tb1. It is altered
for i in range(3):
for j in range(3):
print( tb1.items[i][j].n, end="")
print()
这里您正在创建一个类变量items
,该变量将由Tb的所有实例共享。要创建实例变量,请使用\uuuu init\uuu
:
class Tb:
def __init__(self):
self.items = [[Item() for i in range(3)] for j in range(3)]
对于记录,
项
的定义也应作类似更改。因为实例级别n
正在隐藏类级别变量,所以它正好起作用,但是m
仍将在实例之间共享。
class Tb:
def __init__(self):
self.items = [[Item() for i in range(3)] for j in range(3)]