.copy复制新列表后改动新列表旧列表也改变了。
用切片方法或者.copy()方法都尝试过,用短的列表如list= list1 =list.copy()时确实两个列表是分开的,改动一个另一个不变,但我在读取文件存入列表时同样用这个方法将data列表复制出一个newdata列表,改动newdata后data还是也改变了。请问这是什么原因呢?如何才能避免改动data列表呢?import cv2#打开标签
#这版尝试保存整张图分成多张图后的标签和图片
f = open('.\\label\\000006.txt')
f1 = open('10000061.txt','w+')
f2 = open('10000062.txt','w+')
f3 = open('10000063.txt','w+')
#读取标签中目标的坐标
data = []
newdata = []
le =[]
ri=[]
for line in f.readlines():
temp = line.split()
data.append(temp)
newdata = data.copy()#这里复制了新列表
#这一段是裁剪图片的代码
img = cv2.imread('000006.png',1)
a=0
b = 370
height, width, depth = img.shape
for i in range(0,len(data)):
xmin = int(float(data)*width - 0.5*float(data)*width)
le.append(xmin)
xmax = int(float(data)*width + 0.5*float(data)*width)
ri.append(xmax)
if b in range(le,ri):
b = ri + 10
else:
pass
if i == len(data)-1:
dst1 = img
#换成保存图片
cv2.imwrite('.\\save\\10000001'+'.png',dst1)
print(data)#这里打印出来data还是不变的
for i in range(0,len(data)):
newdata=(((le+ri)/2)-a)/(b-a)
print(data)#这里打印出来data就开始变了
newdata=float(newdata)*width/(b-a)
for j in range(0,len(ri)):
if ri in range(a,b):
for p in range(len(newdata)):
f1.write(str(newdata)+' ')
f1.write('\n')
f1.close()
print(newdata)#这里打印出来newdata和data的数值完全一样了。
print(data)
a = b
b = b +370
le =[]
ri=[]
for i in range(0,len(data)):
xmin = int(float(data)*width - 0.5*float(data)*width)
le.append(xmin)
xmax = int(float(data)*width + 0.5*float(data)*width)
ri.append(xmax)
if b in range(le,ri):
b = ri + 10
else:
pass
if i == len(data)-1:
dst1 = img
#换成保存图片
cv2.imwrite('.\\save\\10000002'+'.png',dst1)
for i in range(0,len(data)):
newdata=(((le+ri)/2)-a)/(b-a)
newdata=float(data)*width/(b-a)
for j in range(0,len(ri)):
if ri in range(a,b):
for p in range(len(newdata)):
f2.write(str(newdata)+' ')
f2.write('\n')
f2.close()
a = b
b = b +370
le =[]
ri=[]
for i in range(0,len(data)):
xmin = int(float(data)*width - 0.5*float(data)*width)
le.append(xmin)
xmax = int(float(data)*width + 0.5*float(data)*width)
ri.append(xmax)
if b in range(le,ri):
b = ri + 10
else:
pass
if i == len(data)-1:
dst1 = img
#换成保存图片
cv2.imwrite('.\\save\\10000003'+'.png',dst1)
for i in range(0,len(data)):
newdata=(((le+ri)/2)-a)/(b-a)
newdata=float(data)*width/(b-a)
for j in range(0,len(ri)):
if ri in range(a,b):
for p in range(len(newdata)):
f3.write(str(newdata)+' ')
f3.write('\n')
f3.close()
尝试用id()查看两个列表是不是相同的发现
id(data)
1992971165320
id(newdata)
1992971165192
明明就是两个不同地址的列表啊!为什么改了一个另一个会变啊! 明白了,是浅拷贝和深拷贝的问题。
页:
[1]