python的深浅copy,input

python的赋值

对于python来讲,Python的赋值,如果是同样的数据元素,那它的赋值就仅仅只是变量的名称指向同一个内存地址。来个例子:

a = 1;
b = 1;
print( "a={},b = {}".format(a,b))  #a=1,b = 1
print("a的内存地址{},b的内存地址{}".format(id(a), id(b))) # a的内存地址1881166624,b的内存地址1881166624
l1 = [9, 8 , 7, 'love']
l2 = l1
l1[0] = 6
print(l2)
print(l1)

浅拷贝copy

对于浅copy来说,就是当一个列表存在列表的嵌套(也就是多层),那么浅拷贝只是将第一层数据元素重新创建的是新的内存地址,而从第二层开始,依然还是指向的都是同一个内存地址,也就是说,从第二层以及更深的层数来说,数据元素依然不变,保持一致性。你来仔细看看下面这个例子,你就明白了。

l1 = [9, 8, 7, ['i', 'love', 'you']]
l2 = l1.copy()        
print(l2, id(l1))    #[9, 8, 7, ['i', 'love', 'you']] 2489866260360
print(l1, id(l2))    #[9, 8, 7, ['i', 'love', 'you']] 2489866276424
l1[1] = 5
print(l2, id(l1))    #[9, 8, 7, ['i', 'love', 'you']] 2489866260360
print(l1, id(l2))      #[9, 5, 7, ['i', 'love', 'you']] 2489866276424

l1[3][0] = 'me'
print(l1,id(l1[3]))  #[9, 5, 7, ['me', 'love', 'you']] 2489866276680
print(l2,id(l2[3]))  #[9, 8, 7, ['me', 'love', 'you']] 2489866276680

深拷贝copy

对于深copy来说,两个是完全独立的,改变任意一个的任何元素(无论多少层),另一个绝对不改变。

import copy
l1 = [9, 8, 7, ['i', 'love', 'you']]
l2 = copy.deepcopy(l1)
print(l2, id(l1))    #[9, 8, 7, ['i', 'love', 'you']] 2708854705992
print(l1, id(l2))    #[9, 8, 7, ['i', 'love', 'you']] 2708854705672

l1[1] = 5
print(l2, id(l1))    #[9, 8, 7, ['i', 'love', 'you']] 2708854705992
print(l1, id(l2))      #[9, 5, 7, ['i', 'love', 'you']] 2708854705672

l1[3][0] = 'me'
print(l1,id(l1[3]))  #[9, 5, 7, ['me', 'love', 'you']] 2708854748360
print(l2,id(l2[3])) #[9, 8, 7, ['i', 'love', 'you']] 2708854748936

input

对于input来讲,是从键盘输入的数据,在这个里面的数据,都是字符串。你要想转化为别的数据类型可以使用强制转换。

猜你喜欢

转载自blog.csdn.net/qq_38362416/article/details/83097862