Python is an easy-to-use, relatively platform-agnostic, programming language. You can typically write code without needing to worry about the intricacies of variables or micromanaging memory. Likewise, you can usually rest assured that your code will run equally well on Windows, OSX, and Linux. But those benefits also raise an important question. Two of those three operating systems are case-sensitive. How much freedom does Python provide with casing? And in particular, is Python case sensitive when dealing with identifiers?
Defining Case Sensitivity and Identifiers
The simple answer is that Python is a case-sensitive language. And Python is indeed case sensitive when working with identifiers. The following code offers a quick demonstration.
myVar = “The first identifier”
MyVar = “A second distinct identifier”
We can see here that Python sees myVar and MyVar as distinct from each other. This is due to the fact that while we’re using the same word for our variable, the casing of each variable is distinct. Python sees myVar and MyVar as two different identifiers and allows each to have a unique string assignment. If Python wasn’t case sensitive then line 2 would redefine myVar instead of creating a new variable as MyVar. But this example still leaves a question open. Why is Python case sensitive to identifiers and does this apply in all usage scenarios?
A Deeper Dive Into Case Sensitivity With Identifiers
Python’s cross-platform nature is one of its most important traits. It can run on all of the major operating systems, most of the minor ones, and even on many mobile devices. The language can even be found in some unexpected places such as the internals of media players. Some of these platforms are case-sensitive while others aren’t. So how does Python code get around the issues of case sensitivity in these different environments?
The simple answer is that Python is really a platform unto itself. The term Python technically only refers to the Python programming language. However, in practical terms when someone talks about Python they’re generally referring to a combination of the Python programming language and the official Python interpreter. There are exceptions to this rule such as PyPy and Cython. These options respectively use either just-in-time or full compilation. But in general, Python code will run within a Python interpreter which is largely independent of the underlying operating system.
You can almost think of the Python interpreter as a miniature client operating system within a larger host environment. The interpreted nature of Python means that you’re generally not writing code for the operating system. You’re writing code for the Python interpreter. And, to stress the point, the Python interpreter is case-sensitive. As a result, anything that isn’t bypassing the interpreter to directly talk with the operating system will generally be case-sensitive. This includes identifiers.
The Exception to the Rule
It’s important to keep in mind that identifiers and programming logic will form the bulk of your Python code. But that doesn’t mean it’ll be the entirety of it. Identifiers are always case-sensitive. But the content of those identifiers might not be. The data within variables, for example, might come from a source that isn’t case-sensitive. This is particularly common with file system paths. Python will typically use whatever level of sensitivity the operating system has when working with data outside of the interpreter. So in Windows, which isn’t case sensitive, you could open a file called myFile.txt as myfile.txt. But in Linux, that same code would fail because Unix is typically case sensitive.
Potential issues with casing are one of the reasons why variables often become more complex when working with external data. The Python interpreter knows which casing rules are in play with data generated internally. But it often won’t know what to expect with data outside of its own context. As such, you’ll often find situations where you need to manually specify the nature of a variable before passing it to functions that connect to outside processes. A simple way to remember this is to just keep in mind that Python is internally case-sensitive. But anything outside of the interpreter may or may not care about case.