1、Python 数组的赋值和引用
问题:数组传参,函数内数组修改,主函数数组也发生修改(引用导致)
def Change(a):
a[0]=10
if __name__=="__main__":
a=[1,2,3,4]
Change(a)
print(a) #[10, 2, 3, 4]
list,numpy总结(引用和赋值)
import numpy as np
from copy import copy
def fun1(): #list 引用
a=[1,2,3]
b=a
b[0]=100
print("list一维数组引用:",a,b)
def fun2(): #lsit 赋值
a=[1,2,3]
b=a[:]
b[0]=100
print("list一维数组赋值(切片):",a,b)
def fun3(): #lsit 赋值
a=[1,2,3]
b=copy(a)
b[0]=100
print("list一维数组赋值(copy):",a,b)
def fun4(): #lsit 二维数组不能使用切片,只能使用copy(赋值)
a=[[1,2],[3,4]]
b=copy(a)
b[0][0]=100
print("lsit二维数组引用,不能使用切片,只能使用copy",a,b)
###############################################################
def fun5(): #numpy 引用
a=np.array([1,2])
b=a
a[0]=100
print("numpy一维数组引用",a,b)
def fun6(): #numpy 切片也为引用
a=np.array([1,2])
b=a[:]
a[0]=100
print("numpy一维数组引用(切片)",a,b)
def fun7(): #numpy copy赋值
a=np.array([1,2])
b=copy(a)
a[0]=100
print("numpy一维数组赋值(copy)",a,b)
def fun8(): #numpy 二维数组(切片)
a=np.array([[1,2],[3,4]])
b=a[:,:]
b[0][:]=100
print("numpy二维数组引用(切片)")
print(a)
print(b)
def fun9(): #numpy 二维数组(copy)
a=np.array([[1,2],[3,4]])
b=copy(a)
b[0][:]=100
print("numpy二维数组赋值(copy)")
print(a)
print(b)
if __name__=="__main__":
fun1()
fun2()
fun3()
fun4()
fun5()
fun6()
fun7()
fun8()
fun9()
总结:赋值一般使用copy就完事了
2、java赋值和引用
①基本数据类型和string是直接赋值
②引用数据类型是引用(数组,类,接口)