Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python与对象矩阵_Python_Matrix - Fatal编程技术网

Python与对象矩阵

Python与对象矩阵,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

我是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 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)]