二维的数组复制
我在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]]
推荐文章: