python基础补习-赋值与copy,赋值注意事项
1、赋值‘=’基础
python中 **=**是基本赋值运算符,是地址指针。
'''此时,通过=将10的地址指向给变量a'''
a = 10
2、连续赋值讨论
(1)重新赋值
a=b=10 # a,b指向值10
print(a,b)
'''[out:]10 10'''
b=5 # b指向值5
print(a,b)
'''[out:]10 5'''
可见,b重新赋值不会影响a。因为b重新指向。那么如果只是修改的话?
(2)多重赋值,修改问题
l1 = [1,2,3,4] # l1指向列表
l2 = l1 # l2也指向列表
l2.remove(3) #修改l2
#输出
print(l2)
print(ll)
'''结果'''
[out:]
[1, 2, 4]
[1, 2, 4]
可见,虽然只是修改了l2,但是l1的值也发生了变化。其背后原因是:l2和l1指向的是一个地址,通过变量l2或l1进行如何列表修改(注意是修改,不是(1)中的重新赋值),都是对指向地址的修改,所以都会发生变化。
想传递值,而不是共享这个地址的值,可以使用.copy()
ll = [1,2,3,4]
l3 = ll.copy()
l3.remove(3)
print(l3,ll)
'''结果'''
[out:]
[1,2, 4] [1, 2, 3, 4]
(3)对多变量连续赋值
赋值有三种:
第一种可以通过:变量1,变量2,…变量n=长度为n的list,narry…;
第二种:变量1=变量2=…=变量n=值;
第三种:变量1,变量2,…变量n=值1,值2,…值n
两种赋值的区别在于,第一种要注意右边的必须有和前面变量数一样多值,否则会不匹配报错。第二种,连续赋值,n个变量都是指向那个值同(1)连续赋值。第三种就是按照位置一个一个对应赋值。
import numpy as np
# 第一种,右边的值有4个和右边2个变量不一样多会报错
t1,t2 = np.ones(4)
# 报错:ValueError: too many values to unpack (expected 2)
'''正确第一种'''
t1,t2 = np.ones(2) # 列表同理
print(t1,t2)
# 输出结果:1.0 1.0
#可将,变量t1,t2是一个数
# 第二种
t1=t2 = np.ones(4)
print(t1,t2)
t2[2] = 4 #修改t2
print(t1,t2)
'''结果'''
[out:]
[1. 1. 1. 1.] [1. 1. 1. 1.]
[1. 1. 4. 1.] [1. 1. 4. 1.]
# 可见t1也被修改了,因为都是指向一个内容
#第三种
t1,t2 = np.ones(4),np.ones(4)
print(t1,t2)
t2[2] = 4
print(t1,t2)
'''结果'''
[out:]
[1. 1. 1. 1.] [1. 1. 1. 1.]
[1. 1. 1. 1.] [1. 1. 4. 1.]
# t1没有被修改,这种范式是将变量名分别指向,即使值相同。