二维的数组复制
我在 class 中定义了三个方法#
-
new: 设置 data = [[1,2,3],[4,5,6],[7,8,9]], 保留 data 原值在 data_backup 中#
-
renew: 删去 data 中的 [1,2,3], 再利用 data_backup 还原 data#
-
change: 改变 data 的内容#
结果 data_backup 的内容也变了,确认 data 与 data_backup 的 id address 是不一样的#
请问这是怎么回事?
#
另外:#
我以 self.data_backup = [self.data [i] for i in range (3)] 来作数组备份,#
但是用 self.data_backup = self.data [:] 的方式,结果也是一样.#
class database():
def __init__(self):
self.a = 10
self.b = 100
def new(self):
self.data = [[1,2,3],[4,5,6],[7,8,9]]
self.data_backup = [self.data[i] for i in range(3)]
print(id(self.data), self.data)
print(id(self.data_backup), self.data_backup)
def renew(self):
self.data.remove([1,2,3])
self.data = [self.data_backup[i] for i in range(3)]
print(id(self.data), self.data)
print(id(self.data_backup), self.data_backup)
def change(self):
self.data[0][1] = 999
print(id(self.data), self.data)
print(id(self.data_backup), self.data_backup)
db = database()
db.new()
db.renew()
db.change()
new:
129230600 [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
129233352 [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
renew:
126829768 [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
129233352 [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
change:
126829768 [[1, 999, 3], [4, 5, 6], [7, 8, 9]]
129233352 [[1, 999, 3], [4, 5, 6], [7, 8, 9]]
推荐文章: