# Python Data Types: Categorization and Exploration

## Unveiling Python's Data Palette: Dive into Types & Exploration

## Table of contents

Thank you for your continued support and engagement with our blog. We're exploring the Python Series further, building on our previous post. In our previous blog, we learned about

**Python**'s Introduction**Features and Execution**

In this blog, we will delve into an in-depth exploration of Python data types, accompanied by illustrative examples.

## Data Types

Data types are categorizations that define the value of a variable or expression in a computer language, specifying operations, memory requirements, and binary storage. They aid in understanding and modifying the variable's values.

Python's data types are divided into various categories, each of which serves a distinct purpose in programming and caters to diverse scenarios

**Numeric Types**

These data types deal with whole and decimal numbers. The float type supports decimal values, allowing for exact computations. The complex type is used for more sophisticated mathematical operations, expressing integers with real and imaginary components.

**Integer (int)**

Integer data types for whole numbers without a decimal point, such as

**5, -10, or 0**, are represented. To integer numbers, arithmetic operations such as addition, subtraction, multiplication, and division apply.Define two integer variables

**a**and**b**, representing whole numbers, and perform basic arithmetic operations, showcasing int data type usage.`# Define integer variables a = 5 b = -10 # Perform arithmetic operations sum_result = a + b # -5 difference_result = a - b # 15 product_result = a * b # -50 division_result = a / b # -0.5 # Print the results print("Sum:", sum_result) print("Difference:", difference_result) print("Product:", product_result) print("Division:", division_result)`

**Floating-Point****(****float****)**Floating-point data types for decimal numbers or in exponential notation, such as

**3.14 or -0.01**. Floating-point values are used for more precise numerical calculations.`# Define float variables pi = 3.14159 negative_value = -0.01234 # Perform calculations involving float values circumference = 2 * pi * 5 # Calculate circumference of a circle with radius 5 area = pi * 5 ** 2 # Calculate area of the circle with radius 5 distance = 10.5 + 3.75 # Calculate the sum of distances # Print the results print("Circumference:", circumference) print("Area:", area) print("Distance:", distance)`

Floating-point variables represent

**π (pi)**and negative decimal values, enabling precise calculations like circumference, area, and distance summation in scientific and engineering applications.**Complex**Complex number data type, consisting of a real and imaginary part.

`# Define a complex number z = 2 + 3j # Access the real and imaginary parts real_part = z.real # 2.0 imaginary_part = z.imag # 3.0 # Perform arithmetic operations addition = z + (1 + 1j) # (3 + 4j) multiplication = z * (1 - 2j) # (8 - 1j) # Conjugate of the complex number conjugate = z.conjugate() # (2 - 3j) # Absolute value (magnitude) of the complex number magnitude = abs(z) # 3.605551275463989 print("Real Part:", real_part) print("Imaginary Part:", imaginary_part) print("Addition:", addition) print("Multiplication:", multiplication) print("Conjugate:", conjugate) print("Magnitude:", magnitude)`

A complex number z has real and imaginary components, enabling fundamental arithmetic operations, accessing components, computing conjugates, and determining magnitude, showcasing their versatility in

mathematical operations.

**Boolean** **Type**

**Bool:****Boolean data type****for representing True or False values.**

```
# Define boolean variables
is_sunny = True
is_raining = False
# Check conditions and perform operations based on boolean values
if is_sunny:
print("It's a sunny day!")
else:
print("It's not sunny today.")
if not is_raining:
print("No need for an umbrella.")
else:
print("Don't forget your umbrella!")
# Boolean operations
both_conditions = is_sunny and not is_raining # True and True = True
either_condition = is_sunny or is_raining # True or False = True
# Printing the results
print("Both Conditions:", both_conditions)
print("Either Condition:", either_condition)
```

Boolean variables **is_sunny** and **is_raining** represent sunny or rainy conditions, controlling program flow and demonstrating operations using operators. Boolean data types are essential for logical conditions and programming branching.

**Sequence Types**

**List**: Mutable ordered collections of values.**Tuple**: Immutable ordered collections of values.**Range**: Represents an immutable sequence of numbers.**String(str)**: String also belongs to this category, as it is a sequence of characters.**String (str):**String data type for sequences of characters.

Character sequences such as "Hello, ByteScrum!" or "Python Series" are represented. Text may be manipulated and concatenated using string data types.

Utilize string variables for greeting messages, language names, and text manipulation in programming scenarios. Demonstrate string concatenation, index access, substring extraction, string length, and conversion to uppercase and lowercase.

`# Define string variables greeting = "Welcome, ByteScrum!" language = "Python Series" # Concatenate strings message_output = greeting + "learning " + language +" is fun " # Welcome,ByteScrum learning Python Series is fun # Accessing characters by index first_char = greeting[0] # 'W' second_char = greeting[6] # 'e' # Slicing strings substring = language[0:3] # 'Pyt' last_three_chars = greeting[-3:] # 'um!' # Length of a string greeting_length = len(greeting) # 19 # Converting to uppercase and lowercase uppercase_greeting = greeting.upper() # 'WELCOME, BYTESCRUM!' lowercase_language = language.lower() # 'python series' # Printing the results print("Message Output:", message_output) print("First Character:", first_char) print("Second Character:", second_char) print("Substring:", substring) print("Last Three Characters:", last_three_chars) print("Length of Greeting:", greeting_length) print("Uppercase Greeting:", uppercase_greeting) print("Lowercase Language:", lowercase_language)`

**List:**Mutable ordered collections of values.Lists are powerful data structures in Python that are commonly used for storing and manipulating ordered groups of objects.

We've created a list called

**numbers**that contains numerous integer values. We show how to add an element, access elements by index, alter an element, remove an element by value, calculate the length of the list, verify the presence of a value in the list, and use a for loop to iterate over the list.`# Define a list of numbers numbers = [1, 2, 3, 4, 5] # Add an element to the end of the list numbers.append(6) # Access elements by index second_number = numbers[1] # 2 # Modify an element numbers[3] = 10 # Remove an element by value numbers.remove(3) # Calculate the length of the list list_length = len(numbers) # 5 # Check if a value is in the list is_in_list = 5 in numbers # True # Iterate through the list for num in numbers: print(num) # Printing the results print("Modified List:", numbers) print("Second Number:", second_number) print("List Length:", list_length) print("Is 5 in the List:", is_in_list)`

**Tuple**: Immutable ordered collections of values.Tuples are similar to lists, except they are immutable, which means that their elements cannot be changed after they are created. They are frequently employed when you want to ensure that the data remains constant during the execution of the application.

We've created a tuple called

**company**that has information on a company's name,**no_of_year**, and experience. We demonstrate indexing tuple members, unpacking a tuple into independent variables, determining tuple length, and concatenating tuples.`company = ("ByteScrum", 6, "Evolving Dynamics in IT Services") # Access elements by index name = company[0] # "ByteScrum" no_of_years = company[1] # 6 experience = company[2] # "Evolving Dynamics in IT Services" # Unpack tuple into variables name, no_of_years, experience = company # Length of the tuple tuple_length = len(company) # 3 # Concatenate tuples services = ("WebServices", "MobileApps", "Blockchain") all_services = company + services # ("ByteScrum", 6, "Evolving Dynamics in IT Services", "WebServices", "MobileApps", "Blockchain") # Printing the results print("Name:", name) print("No_Of_Years:", no_of_years) print("Experience:", experience) print("Tuple Length:", tuple_length) print("All Services:", all_services)`

**Range**: Represents an immutable sequence of numbers.The range data type is widely used to create numerical sequences, especially where memory economy is critical.

We've made a range of numbers ranging from

**0 to 4**(exclusive). The range is then converted to a list for visualization reasons, and iteration across the range is demonstrated, computing the sum of numbers in the range, checking for the presence of a number in the range, and determining the length of the range.`# Create a range of numbers numbers_range = range(5) # Creates a range from 0 to 4 # Convert the range to a list for visualization numbers_list = list(numbers_range) # [0, 1, 2, 3, 4] # Iterate through the range for num in numbers_range: print(num) # Sum of numbers in the range sum_of_numbers = sum(numbers_range) # 10 # Check if a number is in the range is_in_range = 3 in numbers_range # True # Length of the range range_length = len(numbers_range) # 5 # Printing the results print("Range as List:", numbers_list) print("Sum of Numbers:", sum_of_numbers) print("Is 3 in the Range:", is_in_range) print("Range Length:", range_length)`

**Set Types****Set**: Unordered collections of unique values.**Frozenset**: Immutable version of a set**Set**: Unordered collections of unique values.Sets are used to hold collections of unique data, and they are especially effective for eliminating duplicates and performing set-related activities quickly.

In this case, we've created a collection called prime_numbers that contains unique prime numbers. We show how to add and remove items, verify the presence of a value in the set, calculate the set's length, execute set operations like intersection, and iterate through the set.

`# Define a set of unique numbers prime_numbers = {2, 3, 5, 7, 11} # Add an element to the set prime_numbers.add(13) # Remove an element from the set prime_numbers.remove(3) # Check if a value is in the set is_in_set = 5 in prime_numbers # True # Calculate the length of the set set_length = len(prime_numbers) # 4 # Perform set operations even_numbers = {2, 4, 6, 8, 10} intersection = prime_numbers & even_numbers # {2} # Iterate through the set for num in prime_numbers: print(num) # Printing the results print("Is 5 in the Set:", is_in_set) print("Set Length:", set_length) print("Intersection:", intersection`

**Frozenset**: Immutable version of a setFrozenset is used when you want a set-like collection of values that cannot be modified after creation, ensuring their integrity throughout your program's execution.

set named

**vegetables_set**that contains various**vegetables**. We then use the frozenset() method to transform this set into a frozenset. The outcome is an immutable version of the original set called**frozen_vegetables**.We demonstrate how to access frozenset items and check for the existence of specified

**vegetables**. When you want a set-like collection of values that cannot be changed once they are created, frozenset is used to ensure their integrity during the execution of your application.`# Define a regular set of vegetables vegetables_set = {"sweetcorn", "peas", "carrots"} # Convert the set to a frozenset frozen_vegetables = frozenset(vegetables_set) # Access elements in the frozenset (same as set) is_sweetcorn_in_frozen = "sweetcorn" in frozen_vegetables # True is_carrots_in_frozen = "carrots" in frozen_vegetables # True # Printing the results print("Is 'sweetcorn' in Frozen Set:", is_sweetcorn_in_frozen) print("Is 'carrots' in Frozen Set:", is_carrots_in_frozen)`

**Mapping Type****Dictionaries:**Represents key-value pairs, also known as dictionaries.A mapping type is a data type consisting of key-value pairs, allowing for organized and efficient storage and retrieval of data.

In Python, the primary mapping type is a dictionary, which represents structured data and configuration settings.

**Key-Value Pairs**:**Keys**are unique identifiers used to label and access their associated values, while**values**are the actual data associated with keys, ranging from integers to lists.`# Define a dictionary of company information company_details = { "name": "BYTESCRUM TECHNOLOGIES PRIVATE LIMITED.", "industry": "Information Technology", "founded_year": 2017, "employees": "10-50", "headquarters": "Lucknow, Uttar Pradesh" } # Access values using keys company_name = company_details["name"] company_industry = company_details["industry"] founded_year = company_details["founded_year"] employee_count = company_details["employees"] headquarters_location = company_details["headquarters"] # Modify values company_details["employees"] = "11-50" # Add a new key-value pair company_details["website"] = "https://www.bytescrum.com/" # Check if a key is in the dictionary has_year_key = "founded_year" in company_details has_products_key = "products" in company_details # Printing the results print("Company Name:", company_name) print("Industry:", company_industry) print("Founded Year:", founded_year) print("Employee Count:", employee_count) print("Headquarters Location:", headquarters_location) print("Updated Company Details:", company_details) print("Has 'founded_year' Key:", has_year_key) print("Has 'products' Key:", has_products_key)`

**Binary Types****Bytes**: Immutable sequences of bytes.**Bytearray**: Mutable sequences of bytes.**Memoryview**: Used for advanced memory manipulation.

**Bytes**: Immutable sequences of bytes

In Python, bytes are an immutable data type that represents a series of bytes. Bytes are used to store binary data such as photos, music, and other non-textual data. Because bytes are immutable, their values cannot be modified once they are created.

**Example:**Represents the**ASCII**-encoded bytes for "Hello"`data = b'\x48\x65\x6c\x6c\x6f' # Represents the ASCII-encoded bytes for "Hello"`

**Bytearray**: Mutable sequences of bytes.Bytearrays are similar to bytes, except they may be changed. This means that the values of individual bytes inside a bytearray can be changed. It is frequently used when binary data must be manipulated in situ, such as when decoding or encoding protocols.

**Example:**Represents the**ASCII**-encoded bytes for "Hello"`data = bytearray(b'\x48\x65\x6c\x6c\x6f') data[0] = 0x58 # Changes the first byte to represent "X" #Xello`

**Memoryview:**Used for advanced memory manipulationMemoryview is a built-in Python class that allows you to expose an object's buffer interface. It enables you to access an object's internal buffer (such as bytes, bytearray, or other array-like objects) without duplicating its content. This is beneficial for doing memory-efficient operations on huge data collections.

**Example:**Represents the**ASCII**-encoded bytes for "Hello"`data = bytearray(b'\x48\x65\x6c\x6c\x6f') mem_view = memoryview(data) mem_view[1] = 0x75 # Changes the second byte to represent "u" #Hullo`

💡bytes, bytearray, and memoryview are required for dealing with binary data and duties such as parsing file formats, processing network packets, and handling other low-level data operations.**Note:**While bytes and bytearray are routinely used, memoryview is more sophisticated and ideal for circumstances where direct access to memory buffers is required.**None Type****NoneType**: Represents the absence of a value or a null value.NoneType is a data type in Python that represents the absence of a value or a null value.

It's frequently used to signify that a variable or expression, has no relevant data. In other words, assigning the value None to a variable indicates that the variable is not linked to any legitimate object or data.

None is commonly used to initialize variables before assigning a real value to them or as a return value for functions that do not explicitly return anything.

```
#define a function that doesn't return any value
def print_greeting(name):
print(f"Welcome, {name}!")
#call the function
result = print _greeting("ByteScrum")
# the result value is None since the function doesn't have a return statment
print("Result:", result) #Output: Result: None
# Assign a variable the value None to indicate absence of a value
no_data = None
#Check if a variable has a value or is None
if no_data is None:
print("variable has no data")
else:
print("Variable has data")
```

The **print_greeting** function lacks a return statement, it returns None and the variable **no_data** is assigned None to indicate absence. The is None check determines if a variable holds the value None.

## Summary

Stay tuned for upcoming blogs in our Python Series. Subscribe to our updates and share the knowledge with fellow enthusiasts. Explore the depths of Python's data types and harness their power for your programming endeavors.