个人工作室的网站,郑州网络科技有限公司,为进一步加强网站建设,人工智能培训心得体会1、python中的变量python和java中的变量本质不一样。java中声明变量时要指定变量的数据类型#xff0c;int、str或某一类#xff0c;之后虚拟机就会在内存中申请一块空间#xff0c;空间的大小跟类型相关。通俗的理解就是把变量想象成一个盒子#xff0c;盒子里能装什么东西…1、python中的变量python和java中的变量本质不一样。java中声明变量时要指定变量的数据类型int、str或某一类之后虚拟机就会在内存中申请一块空间空间的大小跟类型相关。通俗的理解就是把变量想象成一个盒子盒子里能装什么东西一开始就设定了。比如a1就是将1放到盒子里面。python的变量实质是一个指针指针的大小都是一样的。比如一个指向int类型的指针指针本身大小是固定的也不用考虑int本身所占的内存大小反正是放在内存中。在访问int对象时只需要找到指针即可。拿a1来说首先去内存中声明一个int类型对象开辟一块空间用来存储1然后将a指向1。a [1,2,3]b ab.append(4)print(a) # [1,2,3,4]这里如果用盒子的思想去理解的话将列表[1,2,3]放进一个盒子中再将a放另一个盒子中那么修改b之后打印a的话a就不会发生改变。a [1,2,3]b aprint(a is b) # True通过is也可看到a和b是同一个对象也就是a指向的对象id值和b指向的对象id值相同。2、和is的区别is上边最后说了a [1,2,3] b a这样a和b是同一个对象。那么如果是两个赋值呢a [1,2,3]b [1,2,3]ptint(a is b) # Falseprint(id(a) id(b)) #False从结果来看此时的a和b是不同的对象。也就是说在使用赋值语句时会重新声明一个对象。有一个特殊情况如下a 1b 1print(a is b) #Truepython内部的intern机制——遇到相同的一定范围内的小整数时不在生成新的对象直接指向原来的那个对象。一种内部优化的机制。小段字符串也是一样的。a abcb abcprint(a is b) #True用is对类进行判断class People:passperson People()# isinstance(person,People)if type(person) is People:print(Yes) # Yes因为类本身也是一个对象而且是全局唯一的对象person实际上是指向People的所以type(person)和People的id是一样的。a [1,2,3]b [1,2,3]ptint(a b) # Truea是一个list类型的对象list中实现了一个魔法函数__eq__当遇到时就会调用该函数判断对象的值是否相等。3、del语句和垃圾回收机制python中的垃圾回收算法采用的是引用计数。先定义a1ba然后1这个对象上就会自动生成一个计数器a1时计数器会加1ba说明b也指向了a此时计数器再加1相当于1上面有两个变量指向它。当我们使用del a删除对象时计数器则会减1。当计数器减少到0时python解释器就会将对象回收(不能一直占用在内存中)。c中的删除语句是直接将对象回收这和python不一样。举个栗子aobject()badel aprint(b) # object object at 0x0000000003D90F0print(a) # name a is not defined上面的结果就是b能打印出来a打印不出来。过程就是将对象a删掉同时将引用计数器减1。当python解释器回收对象时会去调用对象的__del__魔法函数。所以当我们做垃圾回收时希望某些资源在对象被回收时释放就可以通过重载__del__函数来实现。class A:def __del__(self):pass4、关于传入列表的一下注意事项第一种情况def add(a,b):abreturn aif __name__ __main__:a 1b 2cadd(a,b)print(c) # 3print(a,b) # 1 2第二种情况def add(a,b):abreturn aif __name__ __main__:a [1,2]b [3,4]cadd(a,b)print(c) # [1,2,3,4]print(a,b) # [1,2,3,4] [3,4]发现此时输入的a改变了因为列表是可变类型符号在运行过程中直接赋值给原前的列表变量a所以原来的a发生了改变。第三种情况def add(a,b):abreturn aif __name__ __main__:a (1,2)b (3,4)cadd(a,b)print(c) # (1,2,3,4)print(a,b) # (1,2) (3,4)总结三种不同类型参数传递进来的时候只有列表对象对原数据产生了影响。所以当传递一个对象到函数中对象如果是list、dict这类的值可被修改的类型可能会引起原始数据的改变。