首页 新闻 会员 周边 捐助

Java,c语言要求数组中元素数据类型必须相同,而python不要求

0
[已解决问题] 解决于 2025-08-30 15:29

是不是c,java语言有缺陷未考虑这点,脚本语言都这样吗js,shell,go

这和python标签对应变量名有关吗

_java_python的主页 _java_python | 小虾三级 | 园豆:984
提问于:2025-08-30 09:22
< >
分享
最佳答案
0

Python 的“变量名”到底是什么?

2.1 官方定义

“Names are introduced by name binding operations... A name is a reference to an object.”
注意用词:reference,而不是 pointer。解释器规范故意不暴露地址,也不允许指针运算。
 
CPython 实现里,每个名字对应一个 PyObject* 指针,但语言层面你看不到这个指针,也改不了它,只能重新绑定(rebinding)。
示意图:
复制
  栈帧 dict (locals)
  ┌--------┐
  │ 'a' ---┼----┐
  │ 'b' ---┼--┐ │
  └--------┘  │ │
              ▼ ▼
           [1, 2, 3]  (PyListObject*)


 “可变 vs 不可变”与指针概念无关,但与绑定行为有关

Python
复制
x = 10
y = x
x += 1 # 新建 int 对象 11,x 重新绑定,y 仍绑定 10
 
lst = [1]
lst2 = lst
lst.append(2) # 对象原地修改,lst2 同步可见
  • int 是不可变对象,+= 产生新对象 → 重新绑定。
  • list 是可变对象,append 改的是对象本身 → 所有别名看到同一变化。

用完整代码把三件事放到一张图:C 指针、C++ 引用、Python 名字

 

  • “Python 里一切皆指针吗?”
    答:实现层面是 PyObject* 指针,但语言语义上是“名字到对象的绑定”,禁止指针运算和裸地址。所以别在简历里写“Python 变量就是指针”。
  • “C++ 引用底层是不是指针?”
    答:实现上通常是指针,但语言语义让它失去指针的全部能力(不可空、不可重绑、不可算术),所以“底层是指针”不等于“引用就是指针”。
  • “Python 的 is 为什么比 == 快?”
    答:is 只比较两个 C 级指针值(PyObject*)是否相等;== 触发 Python 级方法调用,可能递归比较内容。
_java_python | 小虾三级 |园豆:984 | 2025-08-30 15:29
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册