必须知道的python和C的10个区别

本文探讨了Python作为动态语言与C语言作为静态语言在变量类型决定、内存管理、传值方式以及Python的鸭子类型等方面的异同,强调了Python中引用的概念和对象的可变性与不可变性特征。

python和C语言的一些异同

  1. python为动态语言,c为静态语言。
    c语言在编译的时候就决定了变量存储的类型和位置,而python运行时才决定。
  2. 变量的创建
    这个是我最开始没有理清的,c语言创建时会为每个变量分配空间,然后通过标识符去访问变量。而python则为引用。
    比如a=123,表示创建一个为123的数字型变量,然后将对象地址给a。也就是为123贴上a的标签,为了节省空间,两个对象可以通过而在c语言中,则是在内存中创建123的值,我们可以通过标识符去访问这个值和它的地址。
 a = 1
 b = 1
 id(a)==id(b)
 >>> true

上面的代码为什么会出现这样的结果呢?因为,变量a和b都指向了创建的对象1。有人可能就会有疑问,那如果将a修改为2时,那岂不是b也变了。如果按照c语言指针去理解确实是这样,但是在python中右边的值才是创建的对象,左边的始终是标签。

在将a赋值为2时,a会取消对对象1的引用,系统会创建一个对象2,将a标识符指向为2。所以并不影响b标识符。

  1. 内存管理
    在c语言中一般需要malloc和free去手动管理分配内存,内存管理交给了程序员去实现。在python中则使用引用计数去做。
  2. 变量类型
    与c语言不同,python在定义时不需要指明变量类型的。这可能也与第二条有关,因为python的标识符只是指向一个生成的对象,而不是对象本身。
var1 = 123
var1 = '1324'
  1. 函数传值
    python的传值方式是引用传值。那可能就有人要反驳我了,比如下面这个场景:
a = 1
def test(my_var):
    my_var=123
print(a)
>>> 1

如果是引用传值为什么结果仍然是1呢?
是这样的,在函数中my_var与a都指向整形对象1,但是在重新给my_var赋值时,my_var指向了新创建的对象123,所以后面print(a)的值仍然为1,因为它仍然指向整形变量1.

在Python中,传参是传递对象引用的值。这意味着在函数中对传递的对象进行修改时,原始对象也会被改变。但是,如果在函数内部重新分配变量,原始对象不会受到影响(因为,python的数字,字符串,元组是不可变对象,如果修改则会重新创建一个,绑定在变量标签上)。

  1. 鸭子类型(未完待续)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值