首页
更多功能
关于
Search
1
我的博客网站正式上线辣
112 阅读
2
FreeCharts正式版release
67 阅读
3
浅析数字编码
62 阅读
4
numpy库兼容问题
54 阅读
5
Cloudfare白嫖vless服务器
35 阅读
学习
日常
登录
/
注册
Search
标签搜索
FreeCharts
Shijian Wen
累计撰写
12
篇文章
累计收到
89
条评论
首页
栏目
学习
日常
页面
更多功能
关于
搜索到
12
篇与
的结果
2024-11-21
python中的深浅拷贝
如题,这里复习一下python的深浅拷贝问题(因为考试的时候有道题做错了:()首先看定义:浅拷贝:浅拷贝会创建一个新的对象,但新的对象仅复制原对象的第一层内容,对于嵌套的子对象,仅复制引用,不会递归拷贝内部对象。 import copy original = [1, [2, 3], 4] shallow = copy.copy(original) shallow[0] = 99 # 修改第一层元素 shallow[1][0] = 88 # 修改嵌套的子对象 print("Original:", original) # Original: [1, [88, 3], 4] print("Shallow:", shallow) # Shallow: [99, [88, 3], 4] 深拷贝:深拷贝会创建一个新的对象,并递归拷贝所有嵌套的子对象,使新对象完全独立于原对象。 import copy original = [1, [2, 3], 4] deep = copy.deepcopy(original) deep[0] = 99 # 修改第一层元素 deep[1][0] = 88 # 修改嵌套的子对象 print("Original:", original) # Original: [1, [2, 3], 4] print("Deep:", deep) # Deep: [99, [88, 3], 4] 但是,我一直有个误区,把"引用传递"机制当成浅拷贝,这是两个不同的概念,python基于值的内存管理造就了引用传递,但是引用传递在对象的可变性不同时又会呈现不同的效果,比如在函数传参时,可变对象(list)和不可变对象(tuple)都是引用传递,但是效果是不一样的: def test(lst:list, string:str): lst[0] = 10 string += 'a' return string lst = [1,2,3] string = 'vscode' string_new = test(lst, string) print(lst, string, string_new) #输出 [10, 2, 3] vscode vscodea由于传递的是引用,所以对函数内列表形参修改时也会影响外部的原始列表,但是字符串由于是不可变对象,所以当你在函数内对其进行一些合法的操作时,会创建一个新的对象用于操作,而不会修改原始对象. 写下此文,希望下次 不再犯错
2024年11月21日
24 阅读
0 评论
2 点赞
2024-10-29
两个很像的库
使用python合并旋转矩阵和平移矩阵时,想要使用的方法解释器一直找不到,排查各种错误才发现库装错了):import transform3d...实际应为import transforms3d...二者名称很像,同时功能也有重叠,但是transforms3d功能更为健全
2024年10月29日
26 阅读
0 评论
2 点赞
2024-10-17
TC264第二版
暂无简介
2024年10月17日
28 阅读
0 评论
5 点赞
2024-10-15
FreeCharts正式版release
预告了好久终于来了FreeCharts1.输入数据即可生成图表2.目前支持柱状图、折线图、散点图3.生成html文件,具有交互性(也可渲染png)4.支持散点图拟合直线(numpy实现)下载地址:https://github.com/ShijianWen3/FreeCharts/releases/download/FreeChartsv1.1/FreeChartsV1.1.zip
2024年10月15日
67 阅读
22 评论
3 点赞
2024-09-28
浅析数字编码
开始之前,需要明确一件事,“722”和722是两个不同的东西,字符源自人类的自然语言,人类可以识别字符串背后的意义(即代表的值),但是机器不可以,想要让机器进行值的运算,就要给它明确的值。数字编码:准确来说,应该是“数值”编码,我们将数值以二进制的形式储存在计算机中,为了能表示正负数,所以规定最高位为符号位,至此,我们给出了“原码”的概念。 假设计算机已经从电路上( 即加法器 )实现了加法,那对于包含负数的运算:1+(-2)便是: 0000 0001+1000 0010=1000 0011=-3 显然这是错误的,为了实现包含负数的加法运算 (实际上就是实现减法 ),我们引入“反码”,即将负数原码除了符号位以外每一位进行取反操作( 注意,反码和补码的引入都与正数无关,所以正整数的“原反补”一致,后续所说的补码取法也只针对非正数!!! ),使用反码进行刚才的运算: 0000 0001+1111 1101 = 1111 1110 再对结果逆运算得原码1000 0001,即-1,结果正确。 但是光有“反码”还不够,我们还有一个问题没解决,即+-0的问题,+0:0000 0000-0:1000 0000,二者并不一样,但都是0,这会给运算带来歧义,所以我们定义了“补码”,即在反码的基础上+1,注意,这里的+0看作正数,其“原反补”仍然相同,对-0求得补码: 1000 0000 -> 1111 1111 -> 0000 0000 神奇的事出现了,-0和+0的补码相同了,于是歧义就消失了。与此同时,补码并没有丧失反码实现减法的功能,所以最终,我们选择将数据以补码的形式储存在计算机中。 最后,“反码”叫做反码是因为进行了取反操作,那为什么“补码”叫补码呢,这里有一个我在别的大佬的网站上发现的数学概念:“补数”,如果a+b=c那么a,b互为对方到c的补数,以-2为例,原码:1000 0010,补码:1111 1110,二者相加得:1000 0000,也就是说,我们可以这样理解,-2的原码是-2的补码到1000 0000的补码,所以对于一个补码,我们除了对其进行逆运算得到原码,还可以对补码进行一次取补码的操作得到原码: (补码)1111 1110 -> 1000 0001 -> 1000 0010(原码)至此,针对“原反补”的浅析结束。本文的出现源于本人与一个学弟聊天时谈到他正在学习c语言的“原反补”,故有感而作,本人水平有限,如有谬误,恳请批评指正,谢谢!
2024年09月28日
62 阅读
27 评论
3 点赞
1
2
3