# Python Data Types

> An introduction to Python data types like str, int, and float, how to check a type with type() or isinstance(), and how to cast a value to another type.

Author: [Flavio Copes](https://flaviocopes.com/about/) | Published: 2020-12-01 | Topics: [Python](https://flaviocopes.com/tags/python/) | Canonical: https://flaviocopes.com/python-data-types/

[Python](https://flaviocopes.com/python-introduction/) has several built-in types.

If you create the `name` variable assigning it the value "Roger", automatically this variable is now representing a **String** data type.

```python
name = "Roger"
```

You can check which type a variable is using the `type()` function, passing the variable as an argument, and then comparing the result to `str`:

```python
name = "Roger"
type(name) == str #True
```

Or using `isinstance()`:

```python
name = "Roger"
isinstance(name, str) #True
```

> Notice that to see the `True` value in Python, outside of a REPL, you need to wrap this code inside `print()`, but for clarity reasons I avoid using it

We used the `str` class here, but the same works for other data types.

First, we have numbers. Integer numbers are represented using the `int` class. Floating point numbers (fractions) are of type `float`:

```python
age = 1
type(age) == int #True
```

```python
fraction = 0.1
type(fraction) == float #True
```

You saw how to create a type from a value literal, like this:

```python
name = "Flavio"
age = 20
```

Python automatically detects the type from the value type.

You can also create a variable of a specific type by using the class constructor, passing a value literal or a variable name:

```python
name = str("Flavio")
anotherName = str(name)
```

You can also convert from one type to another by using the class constructor. Python will try to determine the correct value, for example extracting a number from a string:

```python
age = int("20")
print(age) #20

fraction = 0.1
intFraction = int(fraction)
print(intFraction) #0
```

This is called **casting**. Of course this conversion might not always work depending on the value passed. If you write `test` instead of `20` in the above string, you'll get a `ValueError: invalid literal for int() with base 10: 'test'` error.

Those are just the basics of types. We have a lot more types in Python:

- `complex` for complex numbers
- `bool` for booleans
- `list` for lists
- `tuple` for tuples
- `range` for ranges
- `dict` for dictionaries
- `set` for sets

and more!

We'll explore them all soon.
