An Introduction to Python's Types

In this post we’ll talk about python’s types, how to use them, how they’re treated, and what we can do with typing.

This is aimed at beginners who have heard the words “Python” and “Types” but haven’t quite nailed down what they have to do with each other.

This is Part 1 of a multi-part series on Python Typing.

Python’s Native Types

The best place to start is just by listing each of the types that Python uses natively so that way we can work through examples later. As with most core-python functionality, the best place to learn more is the documentation, specifically this page.

  • Boolean - bool
  • Integer - int
  • Float - float
  • Complex
  • Iterator
  • Generator
  • List - list
  • Tuple - tuple
  • Range - range
  • String - str
  • Bytes
  • Byte Array
  • Memory View
  • Set - set
  • Frozenset - frozenset
  • Dictionary - dict
  • Context Manager
  • Modules
  • Functions
  • Methods
  • Code Objects
  • Type Objects
  • Null - None
  • Ellipses
  • NotImplemented

Whew, that’s a ton. Let’s focus on the more important ones for now.

Booleans

Truth values, these can take on one of two values - True or False.

In [1]: type(True)
Out[1]: bool

In [2]: type(False)
Out[2]: bool

In [3]: type(5 == 5)
Out[3]: bool

In [4]: type(None is None)
Out[4]: bool

Integers

Basic numeric type, these are whole numbers.

In [5]: type(5)
Out[5]: int

In [6]: type(6 * 10)
Out[6]: int

In [7]: type(-1)
Out[7]: int

Floats

Another numeric type, these are decimal numbers.

In [8]: type(0.0)
Out[8]: float

In [9]: type(3.14159)
Out[9]: float

In [10]: type(2**3.1)
Out[10]: float

Lists

An ordered collection of items. These items don’t have to be the same type, and there’s no limit on the length of the list. Lists are mutable, which we’ll talk about later.

In [11]: type([1, 2, 3])
Out[11]: list

In [12]: type([])
Out[12]: list

Tuples

Another ordered collection of items, which also don’t have to be the same type, and there’s also no limit on the length. However, the big difference between lists and tuples is that tuples are not mutable.

In [13]: type((1, 2, 3))
Out[13]: tuple

In [14]: type((1,))
Out[14]: tuple

Ranges

Ranges are ordered sequences of numbers created with the range keyword.

In [15]: list(range(0, 11, 2))
Out[15]: [0, 2, 4, 6, 8, 10]

In [16]: type(range(10))
Out[16]: range

In [17]: type(range(0, 11, 2))
Out[17]: range

Strings

Strings are an ordered collection of “characters”.

In [18]: type('a')
Out[18]: str

In [19]: type('this is a string')
Out[19]: str

Sets

Sets are an unordered collection of items. These are similar to lists, but are not mutable and not ordered.

In [20]: type({1, 2, 3})
Out[20]: set

Dictionaries

Dictionaries are mappings of Key to Value pairings. The keys can be any immutable thing, and the values can be anything.

In [21]: foo = {'a': 5, 'b': 10}

In [22]: foo['a']
Out[22]: 5

In [23]: type(foo)
Out[23]: dict

In [24]: {[1, 2, 3]: 5}  # can't have mutable keys
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-22-c0fedc33c691> in <module>()
----> 1 {[1, 2, 3]: 5}

TypeError: unhashable type: 'list'

None

The Null type, the type for something that doesn’t exist is called None.

In [25]: type(None)
Out[25]: NoneType

Mutability

We mentioned mutability a lot, but didn’t nail down what that means. It’s a essentially just whether or not a variable is “changeable”. For instance, with a mutable object (like a list) we can change the values in place.

In [1]: foo = [1, 2, 3]

In [2]: foo
Out[2]: [1, 2, 3]

In [3]: foo[0] = -5

In [4]: foo
Out[4]: [-5, 2, 3]

However an immutable object cannot be changed.

In [5]: foo = (1, 2, 3)

In [6]: foo
Out[6]: (1, 2, 3)

In [7]: foo[0] = -5
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-7-c1a884884171> in <module>()
----> 1 foo[0] = -5

TypeError: 'tuple' object does not support item assignment

Conclusion

Everything object in Python has a type, but above we went over the most basic and necessary ones.

In the next post we’ll talk about the types provided by the typing module in Python 3 and how they can be used.